2017-03-29 62 views
1

根據CreateFormInTable.java中的iText7示例代碼,我正在使用自定義渲染器在表單元格上添加PdfTextFormField。這個工程最初,直到我第3頁以後的PDF或創建一個表,在這一點上,我得到一個例外:將PdfFormField添加到大PDF時出現異常

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)); 
} 

在上述iText7 Java示例文件的文檔構造在:

http://developers.itextpdf.com/examples/form-examples/clone-create-fields-table#2350-createformintable.java

我已經在7.0.1和7.0.2上測試過了,結果相同。

回答

0

那麼,目前一些與形式相關的功能需要整個PDF文檔結構才能在內存中運行。這意味着不能刷新對象。但佈局的DocumentRenderer儘可能刷新頁面。該問題只能重現三頁或更多頁面,因爲存在一個未刷新頁面的小窗口。

這確實沒有在樣本中提及,可以在將來改進。在當前版本中,以獲得所需的PDF,您可以設置Document使用下面的構造函數來操作的「推遲沖洗」模式:

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

謝謝,阿列克謝。這工作得很好。 – Vernon

相關問題