Java で記入しなければならない pdf/a-1 フォームがあります。
問題は、通常の pdf では問題なく動作しますが、pdf/a-1 では動作しないことです。
通常の pdf フォームを使用して、フォーム フィールドを表示し、fdf ファイルを生成する HashMap を実装します。
次に、pdftk.exe を使用して fdf ファイルを通常の pdf 形式にインポートすると、正常に動作します。
pdf/a-1 フォームを使用すると、フィールドを表示できず、fdf ファイルをインポートしようとすると、フォームに入力されません。
pdf/a-1 フォームに入力できる簡単な方法があるかどうか、または pdf/a-1 を入力可能にするために何らかのメカニズムを使用する必要があるかどうかはわかりません。
pdfbox と itext を試しましたが、実際には何も見つかりませんでした。
以下は、通常の pdf フォームでは機能するが、フィールドがフラットに見える pdf/a-1 フォームでは機能しない、非常に単純化されたコード実装です。
フィールドを iText で表示する
File pdfFile = new File(PDF_FILE_PATH);
// Display fields
PdfReader reader = new PdfReader(pdfFile.getAbsolutePath());
System.out.println("\n-----Champs du pdf-----");
for (String field : reader.getAcroFields().getFields().keySet()) {
if (field instanceof String) {
System.out.println("String " + field);
} else {
System.out.println(field.getClass().getSimpleName() + " " + field.toString());
}
}
System.out.println("----------\n");
reader.close();
PDFBoxの使用
File pdfFile = new File(PDF_FILE_PATH);
// HashMap Test
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("age", "37");
map.put("name", "Jack");
map.put("address", "930 rue des Pommes");
map.put("lastname", "Wilson");
map.put("description",
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.");
// Load the existing pdf file
PDDocument pdd = PDDocument.load(pdfFile);
PDAcroForm acroForm = pdd.getDocumentCatalog().getAcroForm();
// For each item, sets a value to the corresponding field
for (String item : map.keySet()){
acroForm.getField(item).setValue((String) map.get(item));
}
// Save
pdd.save(pdfFile);
pdd.close();
pdftk の使用
pdftk を使用した実装は、多くの点で上記のように見えますが、HashMap から fdf ファイルを生成し、次のコマンド ラインを使用します。
pdftk.exe myForm.pdf fill_form myFdf.fdf output fulfilled_form.pdf flatten
これが私の 2 つのフォームです。通常のフォームと、pdf/a-1 形式を使用したフォームです。
お役に立てば幸いです。
よろしくお願いします。