Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用itext时的NPE_Java_Pdf_Itext_Livecycle Designer - Fatal编程技术网

Java 使用itext时的NPE

Java 使用itext时的NPE,java,pdf,itext,livecycle-designer,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.re

我有一个可填写的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();
}
同时,当我使用相同的方法,fillOut(字符串输入、字符串输出、布尔删除、布尔保留)来填写表单时,这是以前使用iText创建的表单-一切都正常

7z存档,包含两个pdf,LCtest.pdf由LC designer生成,并生成错误,itest.pdf-由itext生成,工作正常。 那么,怎么了?这是我的代码中的错误,还是错误


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

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

我建议与这个库的提供者联系以获得他们的支持——他们从API中抛出
NullPointerException
,这绝不是故意的


如果这是不可能的,也许您可以获取源代码的副本并调试到其中,以调查有效案例和崩溃案例之间的差异。

从堆栈跟踪中,由于NPE是由
com.itextpdf.text.pdf.XfaForm.findFieldName
抛出的,是否没有名为
“text”的字段
?请说明您正在使用的puff-itext版本。mkl,感谢您的提醒,我已经添加了此信息。Alexis Pigeion,没有。它在方法内部的代码行失败:acroFieldsSom=newacrofieldssearch(datasetsSom.getName2Node().keySet());并且,正如在调试模式下启动我的应用程序所示,datasetsSom为空。另外,datasetsSom在私有字段中使用setter和getter,因此,可以在其类代码之外的某个地方初始化它。所以,这就是为什么我不清楚如何获取它,在哪里以及为什么这个变量没有初始化(只是我不知道在哪里放置breakpionts等等)。
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)