Я использую iText
для заполнения шаблона PDF, содержащего AcroForm
. Теперь я хочу использовать этот шаблон для создания нового PDF-файла с динамическими страницами. Моя идея - заполнить шаблон PDF, скопировать страницу с написанными полями и добавить ее в новый файл. Их главная проблема в том, что наш заказчик хочет сам спроектировать шаблон. Поэтому я не уверен, правильно ли я пытаюсь решить эту проблему.
Итак, я создал этот код, который сейчас не работает, я получаю сообщение об ошибке com.itextpdf.io.IOException: PDF header not found.
Мой код
x = 1;
try (PdfDocument finalDoc = new PdfDocument(new PdfWriter("C:\\Users\\...Final.pdf"))) {
for (HashMap<String, String> map : testValues) {
String path1 = "C:\\Users\\.....Temp.pdf"
InputStream template = templateValues.get("Template");
PdfWriter writer = new PdfWriter(path1);
try (PdfDocument pdfDoc = new PdfDocument(new PdfReader(template), writer)) {
PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true);
for (HashMap.Entry<String, String> map2 : map.entrySet()) {
if (form.getField(map2.getKey()) != null) {
Map<String, PdfFormField> fields = form.getFormFields();
fields.get(map2.getKey()).setValue(map2.getValue());
}
}
} catch (IOException | PdfException ex) {
System.err.println("Ex2: " + ex.getMessage());
}
if (x != 0 && (x % 5) == 0) {
try (PdfDocument tempDoc = new PdfDocument(new PdfReader(path1))) {
PdfPage page = tempDoc.getFirstPage();
finalDoc.addPage(page.copyTo(finalDoc));
} catch (IOException | PdfException ex) {
System.err.println("Ex3: " + ex.getMessage());
}
}
x++;
}
} catch (IOException | PdfException ex) {
System.err.println("Ex: " + ex.getMessage());
}