Itext PdfSmartCopy获取Null指针异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Itext PdfSmartCopy获取Null指针异常相关的知识,希望对你有一定的参考价值。

我现在正在使用Itext PdfSmartCopy。我正在使用XMLworker向文档对象添加一些业务内容。然后我宣布了一个读者(用于将pdf文件连接到此文档对象)。然后我用相同的文档对象和输出文件流作为参数调用PdfSmartCopy。然后我使用常规步骤将页面复制到文档,

addhtml(document, htmlStringToBeAdded);
document.newPage();
com.itextpdf.text.pdf.PdfCopy copy = new com.itextpdf.text.pdf.PdfSmartCopy(document, new FileOutputStream("c:\pdf_issue\bad_itext3.pdf"));
com.itextpdf.text.pdf.PdfReader reader=new com.itextpdf.text.pdf.PdfReader("c:\pdf_issue\bad1.pdf");
 // loop over the pages in that document
 n = reader.getNumberOfPages();
  for (int page = 0; page < n; ) {
                copy.addPage(copy.getImportedPage(reader, ++page));
            }
copy.freeReader(reader);
    reader.close();

但是我在getPageReference上得到Null指针异常?有什么问题?

Exception in thread "main" java.lang.NullPointerException
    at com.itextpdf.text.pdf.PdfWriter.getPageReference(PdfWriter.java:1025)
    at com.itextpdf.text.pdf.PdfWriter.getCurrentPage(PdfWriter.java:1043)
    at com.itextpdf.text.pdf.PdfCopy.addPage(PdfCopy.java:356)
    at com.jci.util.PdfTest.main(PdfTest.java:627)

但是,如果我使用新的文档对象,即不添加业务内容,这部分就可以正常工作。

答案

我们在封闭式问题跟踪器中遇到了类似的问题。在那张票中,似乎需要在创建Document实例后立即打开PdfCopy

在您的情况下,我们看到了类似的问题:您使用Document对象从头开始创建PDF,然后使用相同的Document创建现有PDF的副本。这永远不会起作用:您需要先从头开始创建您创建的文档,然后为复制过程创建一个新的Document

// first create the document
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document, baos);
document.open();
addHTML(document, htmlStringToBeAdded);
document.close();
// Now you can use the document you've just created
PdfReader reader = new PdfReader(baos.toArray());
PdfReader existing = new PdfReader("c:\pdf_issue\bad1.pdf");
document = new Document();
PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream("c:\pdf_issue\bad_itext3.pdf"));
document.open();
copy.addDocument(reader);
copy.addDocument(existing);
document.close();
reader.close();
existing.close();

以上是关于Itext PdfSmartCopy获取Null指针异常的主要内容,如果未能解决你的问题,请参考以下文章

使用 iText 提取文本不起作用:编码或加密文本?

iText生成PDF

IText 生成pdf 怎么设置其大小

如何使用 iText 获取使用多种字体呈现的 pdf

在 iText 7 中编写文档时如何获取垂直光标位置?

如何使用 iText 获取 Pdf 表单字段的自定义格式脚本?