gpt4 book ai didi

java - 如何创建 multiWidget 表单

转载 作者:行者123 更新时间:2023-12-02 09:51:58 26 4
gpt4 key购买 nike

我正在使用 PDFbox V2 从头开始​​创建 pdf,我想创建出现在不同页面上并且在填充时具有相同值的 PDTextField。

我已经阅读了 tilman 在文档中提供的示例,但我有具体问题:我正在从包含有关 pdf 元素信息的 json 文件创建 pdf,所以当我解析 json 时我不知道但如果文本字段出现在不同的页面上或仅出现在单个页面上。

这是在我的 pdf 上创建文本字段的函数。

    @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 上出现最后一次出现: enter image description here

但在 Chrome 上,pdf 表单出现在所有页面上:

enter image description here

这是我添加到 pdf 中的所有多 acroform 元素上出现的问题。

最佳答案

我终于解决了这个问题,它来自于覆盖 PDAnnotationWidget 的列表,这是我修复它的方法:

@Override
public void writeElement(CustomInputField element, PDDocument document, PDPage page, PDAcroForm acroForm) throws IOException {

String inputFieldKey = element.getKey();
PDTextField myTextBox = (PDTextField) acroForm.getField(inputFieldKey);
List<PDAnnotationWidget> widgets;
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);
widgets = new ArrayList<>();
} else {
widgets = myTextBox.getWidgets();
}
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);

}

关于java - 如何创建 multiWidget 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56260474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com