【发布时间】:2017-10-17 20:55:35
【问题描述】:
我创建了带有 3 个标签的简单 PDF 文档:名字、姓氏和照片。然后我使用 Adobe Acrobat PRO DC 添加了带有 2 个“文本字段”和一个“图像字段”的 AcroForm 图层。
因此,如果我想填写表格,我可以在常规 Acrobat Reader 中打开此 PDF 文件并通过键入名字、姓氏来填写,然后为了插入照片,我单击图像占位符并在打开的对话框窗口中选择照片.
但是我怎样才能以编程方式做同样的事情呢? 创建了简单的 Java 应用程序,该应用程序使用 Apache PDFBox 库(版本 2.0.7)来查找表单字段并插入值。
我可以轻松填充文本编辑字段,但不知道如何插入图像:
public class AcroFormPopulator {
public static void main(String[] args) {
AcroFormPopulator abd = new AcroFormPopulator();
try {
abd.populateAndCopy("test.pdf", "generated.pdf");
} catch (IOException e) {
e.printStackTrace();
}
}
private void populateAndCopy(String originalPdf, String targetPdf) throws IOException {
File file = new File(originalPdf);
PDDocument document = PDDocument.load(file);
PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm();
Map<String, String> data = new HashMap<>();
data.put("firstName", "Mike");
data.put("lastName", "Taylor");
data.put("photo_af_image", "photo.jpeg");
for (Map.Entry<String, String> item : data.entrySet()) {
PDField field = acroForm.getField(item.getKey());
if (field != null) {
if (field instanceof PDTextField) {
field.setValue(item.getValue());
} else if (field instanceof PDPushButton) {
File imageFile = new File(item.getValue());
PDPushButton pdPushButton = (PDPushButton) field;
// do not see way to isert image
} else {
System.err.println("No field found with name:" + item.getKey());
}
} else {
System.err.println("No field found with name:" + item.getKey());
}
}
document.save(targetPdf);
document.close();
System.out.println("Populated!");
}
}
我发现了一件奇怪的事情 - 在 Acrobat Pro DC 中,它说我添加了图像字段,但我通过生成的名称获得的唯一字段:'photo_af_image' 是按钮类型 - PDPushButton(即这就是为什么我检查 if (field instanceof PDPushButton)),但与 Image 无关。
如何将图像插入 AcroForm 的“photo_af_image”字段,以使其适合 Acrobat Pro DC 创建的框的大小?
【问题讨论】:
标签: java pdfbox acrofields