Hi Anshul,

I made a few changes to make this work. First, I used a modified technique
to scale the image to the right dimensions. I also used the PDFBox
JPEGFactory instead of ImageIO to read the image. Lastly, I wrapped
everything in try-with-resources blocks to make sure what you open is
closed even if there is an exception.


public void convertImgToPDF(String imagePath, String fileName, String destDir)
        throws IOException {
    try (PDDocument document = new PDDocument();
         InputStream in = new FileInputStream(imagePath)) {
        PDImageXObject img   = JPEGFactory.createFromStream(document, in);
        Dimension scaledSize = getScaledDimension(img.getWidth(),
img.getHeight());
        PDPage         page  = new PDPage(new
PDRectangle(scaledSize.width, scaledSize.height));
        document.addPage(page);
        try (PDPageContentStream contentStream = new
PDPageContentStream(document, page)) {
            contentStream.drawImage(img, 0, 0, scaledSize.width,
scaledSize.height);
        }
        document.save(destDir + "/" + fileName + ".pdf");
    }
}

// 8.5" * 72 points per inch, PDF Units
private static final int MIN_BOUNDARY = 612;

/**
 * Using this method to scale images to PDF units, maintaining orientation as
 * landscape or portrait.
 *
 * Inspired by a stack overflow post
 * http://stackoverflow.com/questions/23223716/scaled-image-blurry-in-pdfbox
 */
private Dimension getScaledDimension(final int originalWidth, final
int originalHeight) {
    int newWidth;
    int newHeight;

    if (originalWidth < originalHeight) {
        newWidth = MIN_BOUNDARY;
        // scale height to maintain aspect ratio
        newHeight = (newWidth * originalHeight) / originalWidth;
    }
    else {
        newHeight = MIN_BOUNDARY;
        // scale width to maintain aspect ratio
        newWidth = (newHeight * originalWidth) / originalHeight;
    }

    return new Dimension(newWidth, newHeight);
}


I hope that helps,

Doug
--
http://dougsmithdev.com

On Mon, Oct 10, 2016 at 12:49 PM, Anshul Kayastha <[email protected]>
wrote:

> I am using PDFBox v2 to convert jpg images to PDF. JPG image is already on
> the filesystem, so I just pick it up and convert it to PDF. Below is my code
>
> public void convertImgToPDF(String imagePath, String fileName, String 
> destDir) throws IOException {
>         PDDocument document = new PDDocument();
>         InputStream in = new FileInputStream(imagePath);
>         BufferedImage bimg = ImageIO.read(in);
>         float width = bimg.getWidth();
>         float height = bimg.getHeight();
>         PDPage page = new PDPage(new PDRectangle(width, height));
>         document.addPage(page);
>         PDImageXObject img = PDImageXObject.createFromFile(imagePath, 
> document);
>         PDPageContentStream contentStream = new PDPageContentStream(document, 
> page);
>         contentStream.drawImage(img, 0, 0);
>         contentStream.close();
>         in.close();
>         document.save(destDir + "/" + fileName + ".pdf");
>         document.close();
>     }
>
>
> This code does the conversion just fine. However, I have observed the
> following in converted PDFs
>
>    1. When I open a converted PDF, it opens very slowly (in Acrobat
>    reader). It seems as it PDF is opening pixel by pixel. If I open any other
>    PDF, it opens fine.
>    2. The default size in acrobat reader is shown as a smaller value
>    (like 15% or 26%, screenshot attached) for converted PDFs. Even though it
>    covers 100% of the screen (15% should have implied that I see a much
>    smaller image, but that is not the case). When I change the size to 100%, I
>    see a highly blurred image which is much larger than the actual image and I
>    have to scroll left/right and top/down to see the complete image.
>
> Both these observations make me feel that for some reason the PDF that is
> getting generated is a much higher resolution than it should have been.
> Would that be a fair statement? If so, how can I correct this?
>
> Also, attached is a sample image that I am trying to convert.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>

Reply via email to