Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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 将PdfFormField添加到大PDF时出现异常_Java_Pdf_Itext7 - Fatal编程技术网

Java 将PdfFormField添加到大PDF时出现异常

Java 将PdfFormField添加到大PDF时出现异常,java,pdf,itext7,Java,Pdf,Itext7,根据createFormTable.java中的iText7示例代码,我正在使用自定义呈现程序在表单元格上添加一个PdfTextFormField。在我在PDF的第3页或更高版本上创建一个表之前,这种方法最初是有效的,在这一点上,我得到了一个异常: Caused by: java.lang.NullPointerException at com.itextpdf.kernel.pdf.PdfDictionary.get(PdfDictionary.java:552) at com.itextpd

根据
createFormTable.java
中的iText7示例代码,我正在使用自定义呈现程序在表单元格上添加一个PdfTextFormField。在我在PDF的第3页或更高版本上创建一个表之前,这种方法最初是有效的,在这一点上,我得到了一个异常:

Caused by: java.lang.NullPointerException
at com.itextpdf.kernel.pdf.PdfDictionary.get(PdfDictionary.java:552)
at com.itextpdf.kernel.pdf.PdfDictionary.getAsArray(PdfDictionary.java:156)
at com.itextpdf.kernel.pdf.PdfPage.getAnnotations(PdfPage.java:746)
at ...pdf.annot.PdfAnnotation.getPage(PdfAnnotation.java:435)
at ...forms.fields.PdfFormField.regenerateField(PdfFormField.java:1761)
at ...forms.fields.PdfFormField.setValue(PdfFormField.java:1038)
at ...forms.fields.PdfFormField.setValue(PdfFormField.java:999)
at ...forms.fields.PdfFormField.setValue(PdfFormField.java:994)
etc.
它似乎很容易复制,如果您愿意,我可以提供完整的代码示例,但一个简单的方法是插入:

for (int i=1; i < 2; i++)  // Change 2 to 3 and you get an NPE
{
    Paragraph  para = new Paragraph("Page "+ i);
    doc.add( para );
    doc.add( new AreaBreak( AreaBreakType.NEXT_PAGE ) );
}
for(inti=1;i<2;i++)//将2更改为3,您将得到一个NPE
{
段落段落=新段落(“第”+i页);
添加文件(第6段);
新增单据(新增区域分隔符(AreaBreakType.NEXT_页));
}
在前面提到的iText7 Java示例文件中的文档构造函数之后,位于:


我已经在7.0.1和7.0.2上对它进行了测试,得到了相同的结果。

目前,一些表单相关功能需要整个PDF文档结构都在内存中才能运行。这意味着不能刷新任何对象。但布局的
DocumentRenderer
尽可能刷新页面。这个问题只会在三页或更多页上出现,因为有一个很小的“窗口”是未刷新的页

样本中确实没有提到这一点,将来可以改进。在当前版本中,要获得所需的PDF,可以使用以下构造函数将
文档设置为在“推迟刷新”模式下运行:

Document doc = new Document(pdfDoc, PageSize.A4, false);

这不应该是库的默认行为吗?如果不设置FALSE,FALSE是默认值,它就不能工作吗?@mixtou不这么认为。据我所知,95%的用例不需要不刷新内容的高级功能。