Нам нужно импортировать существующие несколько PDF-файлов в один новый PDF-файл. Часть кодов работает аналогично коды образцов в разделе 6.2.1 IText в действии 2-е издания:Скопируйте PDF с помощью аннотаций с помощью iText
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
.
Но каково решение сохранить эти аннотации?
Посмотрите образцы PdfCopy в главе 6. – mkl