我们目前正在将我们的代码库从iText 2.1.7移植到iText 5.5.0(是的,我知道......我们有一点时间了;-)。 好吧......“现在”copyAcroForm已经走了Dodo的路,我很难找到这个代码的替代品:
File outputFile = new File...
Document document = new Document();
FileOutputStream fos = new FileOutputStream(outputFile);
PdfCopy subjobWriter = new PdfCopy(document, fos);
document.open();
PdfReader reader = new PdfReader(generationReader);
for (int i=1; i<=reader.getNumberOfPages(); i++) {
PdfImportedPage page = subjobWriter.getImportedPage(reader, i);
subjobWriter.addPage(page);
}
PRAcroForm form = reader.getAcroForm();
if (form != null)
subjobWriter.copyAcroForm(reader);
subjobWriter.freeReader(reader);
reader.close();
subjobWriter.close();
document.close();
fos.close();
但还没找到任何东西。我在4.34左右的更新日志中读到了我显然应该使用PdfCopy.addDocument()。我试过了,并注释掉了其他代码,例如:
...
PdfReader reader = new PdfReader(generationReader);
reader.consolidateNamedDestinations();
subjobWriter.addDocument(reader);
subjobWriter.freeReader(reader);
subjobWriter.setOutlines(SimpleBookmark.getBookmark(reader));
...
但这也没有帮助。
问题是,原始PDF中的所有内容都被复制除了表单(及其字段和内容)之外,或者更确切地说,整个表单看起来已经变平了。
由于我找到的所有样本都使用了不再存在的copyAcroForm()或者不推荐使用的PdfCopyFields类以及itextpdf.com和“iText in Action,2nd edition”中的所有样本都使用copyAcroForm()同样,我也不知道如何解决这个问题。任何人都不知道吗?
罗格
答案 0 :(得分:4)
请查看MergeForms
示例:
Document document = new Document();
PdfCopy copy = new PdfCopy(document, new FileOutputStream(filename));
copy.setMergeFields();
document.open();
for (PdfReader reader : readers) {
copy.addDocument(reader);
}
document.close();
for (PdfReader reader : readers) {
reader.close();
}
特别是一条线非常重要:
copy.setMergeFields();
你添加了那条线吗?