如何在表单中添加管理员风格的输入(PDF)

1 投票
2 回答
61 浏览
提问于 2025-04-14 17:17

我想用Python创建一个可以填写的表单,格式如下图所示:format

我尝试了几种不同的PDF库,但没有一个能生成这样的输入框。我想知道用来制作这些表单的库是什么,以及我是否可以用Python做到这一点。

我看过blob库和aspose库,但都没有成功。

2 个回答

0

有一些Python库可以做到这一点,这里有一个我用过的:

from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfform

def create_fillable_form():
    c = canvas.Canvas("fillable_form.pdf")
    form = c.acroForm

    # Create a text field
    c.drawString(100, 700, "Name:")
    form.textfield(name='name', tooltip='Enter your name', x=150, y=690, width=200)

    # Create a checkbox
    c.drawString(100, 650, "Agree to terms:")
    form.checkbox(name='agree', tooltip='Check to agree', x=180, y=640)

    c.save()

create_fillable_form()

更多文档在这里

如果这样不方便,还有方法可以把HTML页面转换成PDF,可能会更简单。

0

你想要的这种受控字段类型叫做“由脚本管理”的字段,称为 comb。它是为了在兼容Adobe Acrobat的阅读器中使用而设计的,但在没有脚本的情况下,它也应该能在任何Acroform中正常工作,比如在这种情况下,表单管理限制了字符数为37个。

在这里输入图片描述

因此,你需要使用任何能够生成comb字段的工具。这通常是由一个能看见的作者在图形用户界面(GUI)编辑器或图形应用程序中完成的(通常是Adobe InDesign,如上所示),因为它需要在图形上进行视觉放置和调整,并设置编程控制。

在像这样的简单图形编程情况下,“设计师”通常也是“程序员”。

Apryse的产品可能会像这样在代码中设置它:

field.SetFlag(Annot.Flag.e_comb, true);
field.GetSDFObj().PutNumber(“MaxLen”, 37);

关于Apryse iText的使用和限制有更好的描述,可以参考这个回答 https://stackoverflow.com/a/57346920/10802527

因此,这在基于Java或C的PDF库中是一个常规功能,但在Python的PDF生成器中通常找不到。

不过,我注意到在PyPDF文档中有 class FfBits: 的部分。
它有一个“标志”条目为 Comb = 1 << 24 # Tx
https://pypdf.readthedocs.io/en/stable/_modules/pypdf/constants.html?highlight=comb%20#

在PyMuPDF中,控件的标志自然是一样的,但语法是:

PDF_TX_FIELD_IS_COMB 1 << 24
https://pymupdf.readthedocs.io/en/latest/vars.html#widget-flags-field-flags

撰写回答