什么是copyAcroForm的替代品?

时间:2014-03-12 10:23:08

标签: itext

我们目前正在将我们的代码库从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()同样,我也不知道如何解决这个问题。任何人都不知道吗?

罗格

1 个答案:

答案 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();

你添加了那条线吗?