gpt4 book ai didi

java - 使用 itext 7 添加交互式复选框到 PDF

转载 作者:行者123 更新时间:2023-12-02 10:23:04 24 4
gpt4 key购买 nike

我正在尝试将 AcroField 复选框添加到由 iText7 pdfHTML 生成的 PDF 中。默认情况下这不起作用,我看到有人建议使用自定义标记工作器,但尽管我尝试过,但我无法让它工作。有谁知道如何实现这个?或者举个例子?

最佳答案

我创建了一个非常简单的示例,向您展示如何创建自定义标记工作器并在 html 到 pdf 处理时向文档添加 acrofield。

看下一个片段:

class CustomTagWorkerFactory extends DefaultTagWorkerFactory {
@Override
public ITagWorker getCustomTagWorker(IElementNode tag, ProcessorContext context) {
if (tag.name().equals("input")) {
if (AttributeConstants.CHECKBOX.equals(tag.getAttribute(AttributeConstants.TYPE))) {
return new AcroInputTagWorker(tag, context);
}
}
return null;
}

在这里,我引入了一个自定义标记工作器工厂,它将为除我指定的标记 ( <input type="checkbox"> ) 之外的所有标记创建默认标记工作器。

现在让我们将 acrofield 添加到 <input type="checkbox"> 上的文档中处理:

class AcroInputTagWorker extends InputTagWorker {

public AcroInputTagWorker(IElementNode element, ProcessorContext context) {
super(element, context);
PdfAcroForm.getAcroForm(context.getPdfDocument(), true)
.addField(PdfFormField.createCheckBox(context.getPdfDocument(), new Rectangle(100, 700, 30, 30), "checkbox", "Off"));
}

基本上就是这样。一个非常简单的 html 文件(基本上只有一行: <input type="checkbox"> )的结果 pdf 如下所示:

enter image description here

现在让我们简要讨论一下可以改进的地方:

1) 您可能需要检查 CHECKED 属性是否已设置,并在设置 acrofield 的值时考虑它(在上面的示例中,我刚刚将其设置为“关闭”)

2)您需要创建不同的 acrofield 名称值(我刚刚使用了“复选框”)

3) 您可能希望不在 html 到 pdf 处理之前预定义的某个位置渲染 acrofield。您可能想让 iText 根据 input 的位置动态定义其位置。标签已放置。

在这种情况下,解决方案会更加困难。您将需要创建自己的 CheckBox 元素(可能从 Paragraph 扩展)及其渲染器(可能从 ParagraphRender 扩展)。然后你需要覆盖它的 layout方法(也许只需调用 super.layout() 来获取段落的坐标,然后将 acrofield 添加到文档中)。这并不容易,但绝对值得一试!如果你不成功,你可以随时问另一个问题:)

关于java - 使用 itext 7 添加交互式复选框到 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54185621/

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