Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PDFBox - Issue with generating PDF from a image

Tags:

java

pdfbox

I am trying to generate a PDF from images of type JPEG, BMP but i am gettng part of the image on the right always getting cut off. I am using one of the default windows picture Sunset.jpg.

Below is the code:

    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;

    import javax.imageio.ImageIO;
    import javax.imageio.stream.FileImageInputStream;
    import org.apache.pdfbox.exceptions.COSVisitorException;
    import org.apache.pdfbox.io.RandomAccessFile;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.pdmodel.PDPage;
    import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
    import org.apache.pdfbox.pdmodel.graphics.xobject.PDCcitt;
    import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
    import org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap;
    import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;

    public class ImageToPDF 
    {
        public void createPDFFromImage( String file, String image) throws IOException, COSVisitorException
        {
            PDDocument doc = null;
            try
            {
                doc = new PDDocument();
                PDPage page = new PDPage();
                doc.addPage( page );
                PDXObjectImage ximage = null;
                if( image.toLowerCase().endsWith( ".jpg" ) || image.toLowerCase().endsWith( ".jpeg" ))
                {        
                    BufferedImage awtImage = ImageIO.read( new File( image ) );             
            ximage = new PDJpeg(doc, awtImage, 0 );
                }
                else if (image.toLowerCase().endsWith(".tif") || image.toLowerCase().endsWith(".tiff"))
                {
                     ximage = new PDCcitt(doc, new RandomAccessFile(new File(image),"r"));
                }
                else
                {
                         BufferedImage awtImage = new BufferedImage(1000, 800, BufferedImage.TYPE_INT_RGB);             
                     awtImage = ImageIO.read(new FileImageInputStream(new File( image )));                              
                     ximage = new PDPixelMap(doc, awtImage);
                }
                System.out.println(" Width of the image.... "+ximage.getWidth());
                PDPageContentStream contentStream = new PDPageContentStream(doc, page);            
                contentStream.drawImage( ximage, 20, 20 );
                contentStream.close();
                doc.save( file );
           }
           finally
           {
                if( doc != null )
                {
                    doc.close();
                }
           }
       }

       public static void main(String[] args)
       {
            ImageToPDF app = new ImageToPDF();
            try
            {
                 app.createPDFFromImage( "C:\\test1.pdf", "C:\\Sunset.jpg");                        
            }
            catch (Exception e)
            {
                 e.printStackTrace();
            }
       }

}

Please help me in correcting what i am doing wrong.

like image 632
user1879808 Avatar asked Dec 05 '12 17:12

user1879808


People also ask

Is PDFBox free for commercial use?

Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative ...

What is the latest version of PDFBox?

Apache PDFBox 3.0.0-alpha3 released See the full release notes for details about this release. The Migration Guide shall give users coming from PDFBox 2.0. x an overview about things to look at when switching over. More details to come.


Video Answer


1 Answers

These code may helpful to you,It works.

    public void createPDFFromImage(String pdfFile, 
        List<String> imgList,int x, int y, float scale) throws IOException, COSVisitorException {
    // the document
    PDDocument doc = null;
    try {
        doc = new PDDocument();
        Iterator iter = imgList.iterator();
        int imgIndex=0;
        while(iter.hasNext()) {
            PDPage page = new PDPage();
            doc.addPage(page);

            BufferedImage tmp_image = ImageIO.read(new File(iter.next().toString()));
            BufferedImage image = new BufferedImage(tmp_image.getWidth(), tmp_image.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);        
            image.createGraphics().drawRenderedImage(tmp_image, null);

            PDXObjectImage ximage = new PDPixelMap(doc, image);

            imgIndex++;


            PDPageContentStream contentStream = new PDPageContentStream(
                    doc, page,true,true);

            contentStream.drawXObject(ximage, x, y, ximage.getWidth()*scale, ximage.getHeight()*scale);

            contentStream.close();
        }
        doc.save(pdfFile);
    } finally {
        if (doc != null) {
            doc.close();
        }
    }
}
like image 85
Michael Avatar answered Oct 05 '22 14:10

Michael