【发布时间】:2019-10-09 03:47:05
【问题描述】:
我正在使用 PDFbox V2 从头开始创建 pdf,我想创建出现在不同页面上并且在填充时具有相同值的 PDTextField。
我已经阅读了 tilman 在文档中提供的示例,但我有一个特定的问题:我正在从包含有关 pdf 元素的信息的 json 文件创建 pdf,所以当我解析 json 时我不知道但是,如果文本字段出现在不同的页面上或仅出现在单个页面上。
这是在我的 pdf 上创建 textField 的函数。
@Override
public void writeElement(CustomInputField element, PDDocument document,
PDPage page, PDAcroForm acroForm) throws IOException {
String inputFieldKey = element.getKey();
PDTextField myTextBox = (PDTextField) acroForm.getField(inputFieldKey);
if(myTextBox == null) { // if pdtexField don't exist
myTextBox = new PDTextField(acroForm);
myTextBox.setMultiline(true);
myTextBox.setPartialName(inputFieldKey);
myTextBox.setAlternateFieldName(element.getTooltip());
acroForm.getFields().add(myTextBox);
System.out.println(myTextBox);
}
List<PDAnnotationWidget> widgets = new ArrayList<>();
PDAnnotationWidget widget = new PDAnnotationWidget();
PDRectangle rect = new PDRectangle(element.getLeft(), page.getMediaBox().getHeight() - (element.getTop() + element.getHeight()), element.getWidth(),
element.getHeight());
widget.setRectangle(rect);
widget.setPage(page);
widget.setParent(myTextBox);
widget.setPrinted(true);
page.getAnnotations().add(widget);
widgets.add(widget);
myTextBox.setWidgets(widgets);
}
方法调用
private void writeElementsInPage(PDDocument document, PDPage page, AbstractPDFObject currentElement, PDAcroForm acroForm) throws IOException {
switch (ElementEnum.resolveElment(currentElement.getClass())) {
case Rectangle:
rectangleService.writeElement((CustomRectangle) currentElement, document, page, null);
break;
case Image:
imageService.writeElement((CustomImage) currentElement, document, page, null);
break;
case CheckBox:
checkBoxService.writeElement((CustomInputCheckBox) currentElement, document, page, acroForm);
break;
case InputField:
inputFieldService.writeElement((CustomInputField) currentElement, document, page, acroForm);
break;
default:
System.err.println("UNKNOWN Element\t" + currentElement.getClass().getCanonicalName());
break;
}
}
我得到的 pdf 只有最后一次出现在 adobe reader 上:
但在 chrome 上,pdf 表单出现在所有页面上:
这是我添加到我的 pdf 中的所有多 acroform 元素都会出现的问题。
【问题讨论】:
-
你能分享结果PDF吗?您使用的是什么 PDFBox 版本?希望是 2.0.15。
-
我使用的是 PDFBox v 2.0.14,这里是驱动链接drive.google.com/open?id=1YJ4ncXOrm9yfJLynu_hzihny-xtXPpLP
-
您的 acroform 没有字段(PDFDebugger 中的
Root/AcroForm/Fields)。 acroform 是否已分配给文档目录?还是您使用的 acroform 对象与属于文档的对象不同? -
我不小心覆盖了 Acroform,我想我纠正了它drive.google.com/open?id=1DCNY6p1ZPFplQ7STrOoLZU3kGlh2tTv1,但主要问题没有解决。