我们需要将现有的多个 PDF 导入到一个新的 PDF 中。部分代码的工作方式类似于iText in Action 2nd edition的第 6.2.1 节中的示例代码:
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(
document, new FileOutputStream(RESULT));
document.open();
PdfPTable table = new PdfPTable(2);
PdfReader reader = new PdfReader(MovieTemplates.RESULT);
int n = reader.getNumberOfPages();
PdfImportedPage page;
for (int i = 1; i <= n; i++) {
page = writer.getImportedPage(reader, i);
table.addCell(Image.getInstance(page));
}
document.add(table);
document.close();
然而,我们刚刚意识到,在处理带有注释的可填充 PDF 时(在我们的例子中,那些 PDF 已经填充了数据),所有填充的数据都会丢失在新的 PDF 中。
我们在本书的同一部分找到了答案:
了解呈现页面内容所需的资源与页面的交互功能之间的区别非常重要。通常,这些特征称为注释。它们包括链接、文本注释和表单域。注释不是内容流的一部分。它们不在页面的资源字典中,而是在注释字典中。使用时不会复制这些交互功能
PdfImportedPage
,这意味着使用类的getImportedPage()
方法复制页面时会丢失所有交互性PdfWriter
。
但是保留这些注释的解决方案是什么?