【问题标题】:PDFBox v2 write PNG image to PDF file, getting empty filePDFBox v2将PNG图像写入PDF文件,得到空文件
【发布时间】:2016-05-25 16:05:41
【问题描述】:

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

我看到已经有一个答案提到它已在 PDFBox2 上修复: How to add .png images to pdf using Apache PDFBoxhttps://issues.apache.org/jira/browse/PDFBOX-1990

这是我的代码:

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

    }
}

也不例外。刚刚创建了一个空的 PDF 文件。

【问题讨论】:

    标签: java image pdf png pdfbox


    【解决方案1】:

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

    doc.addPage(new PDPage());
    

    但随后为您未添加到文档中的另一个新页面创建内容流:

    PDPageContentStream contentStream = new PDPageContentStream(doc, new PDPage(), true, false);
    

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

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

    【讨论】:

    • 我收到此错误。 -- 失败 --javax.imageio.IIOException: 不支持的图像类型
    • @Dhrumi 表示 java 图像 io 类不支持您使用的图像类型,至少在没有其他插件的情况下不支持。
    • 对于任何类型的图像,我都会收到此错误。像 JPG、JPEG、PNG 等。我在使用 Apache PDFBox 2.0.5 时遇到同样的错误。我必须转移到较低版本的 PDFBox,而且这个问题不会出现。我不确定为什么这个问题会出现在新版本中。
    • 请自行提出堆栈溢出问题,并提供您确切的关键代码和示例文件以重现该问题。
    • 当我使用旧版本的 PDF 框时,我能够以 PDF 格式生成图像。我不确定最新版本有什么问题。我会将这个问题发布到 apache PDF 问题跟踪器。
    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2014-06-13
    • 2018-03-22
    • 2018-08-20
    相关资源
    最近更新 更多