PDAcroForm.flatten()
リッチ テキストを含む PDF のフォーム フィールド ( ) をフラット化しようとしています。そうすると、書式設定 (太字、斜体、色、サイズ) が失われます。
String inputFileName = "test.pdf";
String val = "<?xml version=\"1.0\"?>"
+ "<body xmlns=\"http://www.w3.org/1999/xhtml\">"
+ "<p style=\"color:#FF0000;font-size:8pt;\">"
+ "<i>Small</i> <b>Red</b> "
+ "</p>"
+ "<p style=\"color:#00FF00;font-size:20pt;\">"
+ "<i>Big</i> <b>Green</b> "
+ "</p>"
+ "</body>";
String valNoFormat = "Small Red\rBig Green\r";
PDDocument pdf_document = PDDocument.load(new File(inputFileName));
PDAcroForm acroForm = pdf_document.getDocumentCatalog().getAcroForm();
PDTextField acroField = (PDTextField)acroForm.getField("example_field_number_one");
acroField.setValue(valNoFormat);
acroField.setRichTextValue(val);
acroForm.setNeedAppearances(true);
pdf_document.save(new File("output01.pdf"));
List<PDField> the_fields = new ArrayList<PDField>();
for (PDField field: pdf_document.getDocumentCatalog().getAcroForm().getFieldTree()) {
the_fields.add(field);
}
System.out.println("Flattening fields: " + Arrays.stream(the_fields.toArray()).map(field -> ((PDField)field).getFullyQualifiedName()).collect(Collectors.joining(", ","[","]")));
acroForm.setNeedAppearances(true);
pdf_document.getDocumentCatalog().getAcroForm().flatten(the_fields, true);
pdf_document.save(new File("output02.pdf"));
フォームメニューを使用してそのフォーム要素を作成しAdobe Acrobat Pro
10.1.1
、単にpdfを.xmlとして保存しましたtest.pdf
。
完全を期すために、すべてを github にアップロードしました。
- 完全な最小限の例(パーマリンク経由も)
- 入力テンプレート:
test.pdf
- 平坦化する前に、値を入力します。
output01.pdf
- 平坦化後:
output02.pdf
問題は、コンテンツのスタイルを維持しながら入力フィールドを削除して平坦化し、フィールドの自動サイズなどの望ましい機能を維持するにはどうすればよいかということです。