使用itext时的NPE

时间:2012-12-19 08:29:20

标签: 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(字符串输入,字符串输出,布尔删除,布尔保留),填写以前用iText创建的表单 - 一切正常。

Here is 7z存档同时使用LC设计器生成pdf,LCtest.pdf,并生成错误,itest.pdf - 使用itext制作并且工作正常。 那么,有什么不对?我的代码中有问题,还是错误?

PS: iText版本i使用的是5.1.3,而5.3.5的行为方式相同。

1 个答案:

答案 0 :(得分:2)

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

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

如果那是不可能的,也许您可​​以获得源代码的副本并进行调试,以调查有效案例与崩溃案例之间的差异。