繁体   English   中英

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

[英]Add interactive checkbox to PDF using itext 7

我正在尝试将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"> )。

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

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文件pdf(基本上,只有一行: <input type="checkbox"> )看起来像这样:

在此处输入图片说明

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

1)您可能想检查是否设置了CHECKED属性,并在设置acrofield的值时考虑它(在上面的示例中,我只是将其设置为“ Off”)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM