我正在使用iText 5.4.5合并一些输入PDF文档的任务。输入的文档可能包含或不包含AcroForms,我也想合并表格。

我正在使用发现here的示例pdf文件,这是代码示例:

public class TestForms {

 @Test
 public void testNoForms() throws DocumentException, IOException {
     test("pdf/hello.pdf", "pdf/hello_memory.pdf");
 }

 @Test
 public void testForms() throws DocumentException, IOException {
     test("pdf/subscribe.pdf", "pdf/filled_form_1.pdf");
 }

 private void test(String first, String second) throws DocumentException, IOException {
    OutputStream out = new FileOutputStream("/tmp/out.pdf");
    InputStream stream = getClass().getClassLoader().getResourceAsStream(first);
    PdfReader reader = new PdfReader(new RandomAccessFileOrArray(
            new RandomAccessSourceFactory().createSource(stream)), null);
    InputStream stream2 = getClass().getClassLoader().getResourceAsStream(second);
    PdfReader reader2 = new PdfReader(new RandomAccessFileOrArray(
            new RandomAccessSourceFactory().createSource(stream2)), null);

    Document pdfDocument = new Document(reader.getPageSizeWithRotation(1));
    PdfCopy pdfCopy = new PdfCopy(pdfDocument, out);
    pdfCopy.setFullCompression();
    pdfCopy.setCompressionLevel(PdfStream.BEST_COMPRESSION);
    pdfCopy.setMergeFields();
    pdfDocument.open();
    pdfCopy.addDocument(reader);
    pdfCopy.addDocument(reader2);
    pdfCopy.close();
    reader.close();
    reader2.close();
 }
}



使用包含表单的输入文件,我得到一个启用或不启用压缩的NullPointerException
使用标准输入文档,将创建输出文件,但是当我使用Acrobat打开文件时,它说出现了问题(14),并且未显示任何内容。
在禁用标准输入文档和压缩的情况下,将创建输出并由Acrobat显示。


问题


我以前使用PdfCopyFields进行了此操作,但现在不赞成使用,而是使用mergeFields中的布尔标志PdfCopy,对吗?该标志上没有javadoc,我找不到有关它的文档。
假设上一个问题的答案是“是”,我的代码有什么问题吗?
谢谢

最佳答案

您使用的PdfCopy.setMergeFields()是正确的,并且合并代码也不错。

您描述的问题是由于爬入5.4.5的错误引起的。它们应该在修订版中修复。 6152和修复程序将包含在下一版本中。

谢谢让我们注意到这个。

关于java - PdfCopy中的iText mergeFields创建无效的pdf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21189981/

10-09 18:56