我正在使用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/