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());
}