Нам нужно импортировать несколько существующих PDF-файлов в один новый PDF-файл. Часть кодов работает аналогично образцам кодов в разделе 6.2.1 документа iText in Action 2nd edition:
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
.
Но как можно сохранить эти аннотации?