7

タイプJPEG、BMPの画像からPDFを生成しようとしていますが、右側の画像の一部が常に切り取られています。デフォルトの Windows 画像 Sunset.jpg の 1 つを使用しています。

以下はコードです:

    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();
            }
       }

}

私が間違っていることを修正するのを手伝ってください。

4

5 に答える 5

0

画像が途切れないようにトリミングすることを検討しましたか?

contentStream.drawImage( ximage, 20, 20, croppedWidth, croppedHeight );
于 2013-06-13T15:49:45.240 に答える
0

以下のスニペットを追加して試してください。

インポートが必要:

import org.apache.pdfbox.pdmodel.common.PDRectangle;

コードの追加:

PDXObjectImage image = new PDJpeg(pdfDoc, filePath));

float w = image.getWidth();
float h = image.getHeight();

PDPage page = new PDPage(new PDRectangle (w,h));
于 2015-11-14T20:38:41.820 に答える