java - 使用 itext 时的 NPE

标签 java pdf itext livecycle-designer

我有一个可填写的 pdf 表单,是用 LC Designer 制作的。 我想使用 iText 自动填写:

    public void fillOut(String input, String output, boolean remove, boolean preserve) throws IOException, DocumentException{
    PdfReader reader = new PdfReader(input);
    if (remove) 
        reader.removeUsageRights();
    PdfStamper stamper;
    if(preserve){
        System.out.println("preserve");
        stamper = new PdfStamper(reader, new FileOutputStream(input), '\0', true);
    }else{
        System.out.println("don't preserve");
        stamper = new PdfStamper(reader, new FileOutputStream(output));
    }
    AcroFields form = stamper.getAcroFields();
    Map<String,Item> fields = form.getFields();
    System.out.println(fields.size());
    for (Entry<String, Item> ent: fields.entrySet()) {
        System.out.println("[" + ent.getKey() + "] [" + ent.getValue() + "]");
    }
    form.setField("Text", "test text");

    stamper.close();
}

但是这段代码产生了 NPE:

Exception in thread "main" java.lang.NullPointerException
    at com.itextpdf.text.pdf.XfaForm.findFieldName(XfaForm.java:294)
    at com.itextpdf.text.pdf.AcroFields.setField(AcroFields.java:1387)
    at com.itextpdf.text.pdf.AcroFields.setField(AcroFields.java:1316)
    at FillOutForm.fillOut(FillOutForm.java:40)
    at AcroTest.main(AcroTest.java:13)

同时,当我使用相同的方法 fillOut(String input, String output, boolean remove, booleanpreserve) 来填写之前使用 iText 创建的表单时,一切正常。

Here is 7z 存档包含两个 pdf,LCtest.pdf 由 LC 设计器制作,并生成错误,itest.pdf - 由 itext 制作且工作正常。 那么,到底出了什么问题呢?是我的代码有问题还是 bug?

PS:我使用的 iText 版本是 5.1.3,5.3.5 的操作方式相同。

最佳答案

NPE 没有发生在您的代码中,而是发生在您正在使用的库中:com.itextpdf.text.pdf

我建议跟进该库的提供者以获得他们的支持 - 他们极不可能从他们的 API 中抛出 NullPointerException

如果这是不可能的,也许您可​​以获取源代码的副本并对其进行调试,以调查有效情况和崩溃情况之间的差异。

关于java - 使用 itext 时的 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13948249/

相关文章:

java - 如何告诉 Jackson 序列化为没有属性前缀的 json

java - 自定义适配器 onClick 未注册点击

Java如何检查二维数组中的一行是否为空。

java - 以线性时间迭代数组时 HashMap 的空间复杂度

java - 如何使用 itext 在 pdf 页脚上添加页码,它应该照顾其宽度?

java - iText:在 Java 中将 html 和 css 转换为 PDF

pdf - 使用生成的 XHTML 文档时设置 URL 解析器目录?

java - 使用 Java 更改/替换 PDF 中的文本

java - Android iText 阅读 PDF : Difference between iText's Parser and Extraction

java - 为 iText 生成的 PDF 编写 JUnit