Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting PDF to JPG like Photoshop quality - Commercial C++ / Delphi library

For the implementation of a Windows based page-flip application I need to be able to convert a large number of PDF pages into good quality JPG, not just thumbnails.

The aim is to achieve the best quality / file size for that, similar to Photoshops Save for Web does that.

Currently Im using Datalogics Adobe PDF Library SDK, which does not seem to be able to fullfil that task. I am thus looking for an alternative commcerical C++ or Delphi library which provides a good qualtiy / size / speed.

After doing some search here, I noticed that most posts are about GS & Imagekick, which I have also tested, but I am not satisfied with the output and the speed.

The target is to import the PDFs with 300dpi and convert them with JPG quality 50, 1500px height and an ouput size of 300-500kb.

If anyone could point out a good library for that task, I would be most greatful.

like image 453
idplanter Avatar asked Feb 20 '12 11:02

idplanter


3 Answers

The Gnostice PDFtoolKit VCL may be a candidate. Convert to JPEG is one of the options.

like image 130
LU RD Avatar answered Nov 17 '22 05:11

LU RD


I always recommend Graphics32 for all your image manipulation needs; you have several resamplers to choose. However, I don't think it can read PDF files as images. But if you can generate the big image yourself it may be a good choice.

like image 1
Leonardo Herrera Avatar answered Nov 17 '22 03:11

Leonardo Herrera


Atalasoft DotImage (with the PDF rasterizer add-on) will do that (I work on PDF technologies there). You'd be working in C# (or another .NET) language:

ConvertToJpegs(string outfileStem, Stream pdf)
{
    JpegEncoder encoder = new JpegEncoder();
    encoder.Quality = 50;

    int page = 1;
    PdfImageSource source = new PdfImageSource(pdf);
    source.Resolution = 300; // sets the rendering resolution to 200 dpi
    // larger numbers means better resolution in the image, but will cost in
    // terms of output file size - as resolution increases, memory used increases
    // as a function of the square of the resolution, whereas compression only
    // saves maybe a flat 30% of the total image size, depending on the Quality
    // setting on the encoder.

    while (source.HasMoreImages()) {
        AtalaImage image = source.AcquireNext();
        // this image will be in either 8 bit gray or 24 bit rgb depending
        // on the page contents.

        try {
            string path = String.Format("{0}{1}.jpg", outFileStem, page++);
            // if you need to resample the image, this is the place to do it
            image.Save(path, encoder, null);
        }
        finally {
            source.Release(image);
        }
    }
}
like image 1
plinth Avatar answered Nov 17 '22 05:11

plinth