如何在表单中添加管理员风格的输入(PDF)
我想用Python创建一个可以填写的表单,格式如下图所示:。
我尝试了几种不同的PDF库,但没有一个能生成这样的输入框。我想知道用来制作这些表单的库是什么,以及我是否可以用Python做到这一点。
我看过blob库和aspose
库,但都没有成功。
2 个回答
有一些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,可能会更简单。
你想要的这种受控字段类型叫做“由脚本管理”的字段,称为 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