PDFBox v2将PNG图像写入PDF文件,获取空文件

Dan*_* L. 3 java pdf png image pdfbox

我正在使用PDFBox 2.尝试将PNG图像文件写入新的PDF文件.

我看到已经有一个答案,提到它已修复PDFBox2: 如何使用Apache PDFBoxhttps://issues.apache.org/jira/browse/PDFBOX-1990 将.png图像添加到pdf

这是我的代码:

package pdfProj;

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

import javax.imageio.ImageIO;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

public class b {

    public static void main(String[] args) {
        PDDocument doc = null;
        doc = new PDDocument();        
        doc.addPage(new PDPage());
        try{
            BufferedImage awtImage = ImageIO.read( new File( "c://temp//line_chart.png" ) );
            PDImageXObject  pdImageXObject = LosslessFactory.createFromImage(doc, awtImage);
            PDPageContentStream contentStream = new PDPageContentStream(doc, new PDPage(), true, false);
            contentStream.drawImage(pdImageXObject, 200, 300, awtImage.getWidth() / 2, awtImage.getHeight() / 2);
                contentStream.close();
                doc.save( "c://temp//pdf//PDF_image.pdf" );
            doc.close();
        } catch (Exception io){
            System.out.println(" -- fail --" + io);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

没有例外.只是创建一个空的PDF文件.

mkl*_*mkl 11

问题是您向文档添加了新页面

doc.addPage(new PDPage());
Run Code Online (Sandbox Code Playgroud)

但是然后为另一个新页面创建一个内容流,您不会将其添加到文档中:

PDPageContentStream contentStream = new PDPageContentStream(doc, new PDPage(), true, false);
Run Code Online (Sandbox Code Playgroud)

您应该为添加到文档中的页面创建内容流,例如:

PDDocument doc = null;
doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
try{
    BufferedImage awtImage = ImageIO.read( new File( "c://temp//line_chart.png" ) );
    PDImageXObject  pdImageXObject = LosslessFactory.createFromImage(doc, awtImage);
    PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, false);
    contentStream.drawImage(pdImageXObject, 200, 300, awtImage.getWidth() / 2, awtImage.getHeight() / 2);
    contentStream.close();
    doc.save( "c://temp//pdf//PDF_image.pdf" );
    doc.close();
} catch (Exception io){
    System.out.println(" -- fail --" + io);
}
Run Code Online (Sandbox Code Playgroud)