簡體   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