从用户输入生成PDF表单(Python)

0 投票
2 回答
5246 浏览
提问于 2025-04-17 04:08

我是一名大学生,兼职工作,虽然我有一些Python的经验。最近我想给我的老板留下好印象,打算做一个表单生成器。我的工作是在一个卡丁车场,我们需要人们填写一些安全信息,所以我的目标是制作一个图形界面(GUI)或者网页,让我们只需输入他们的名字和其他信息,就能生成一份包含所有信息的表单,最后他们只需签名就可以了。

我查了一下,发现有很多工具,但我不确定这些工具是否完全符合我的需求,看起来都挺复杂的。

我之前做过一个简单的图形界面,但我更希望能在一个.html页面上完成这个工作。

有没有人能给我一些建议,告诉我该怎么做呢?

谢谢!

另外,我知道这个地方主要是讨论代码的,如果我这样发帖不太合适,我在此表示歉意。

2 个回答

0

作为一种替代方案,你可以不必从头开始用代码生成整个PDF(比如之前提到的使用reportlab,这个方法也很不错,reportlab是一个很好的库),而是可以填充一个已经存在的PDF表单,这个表单可以通过一些编辑软件生成(比如Word或者类似的软件,我自己用的是Scribus NG,不过那个学习起来很麻烦,不太推荐给普通用户)。

填充现有表单的好处是,你可以使用专业的编辑工具来制作表单,这样可以更容易地创建看起来更专业的表单(而且这些表单还可以由平面设计师进行编辑)。缺点是,这个过程稍微复杂一点,而且不是纯粹用Python来解决的。

你需要通过创建一个fdf文件来填充表单,然后从Python中调用一个叫做pdftk的外部工具。写这个fdf文件的过程就留给你自己去做吧!fdf文件基本上就是一个键值对的列表,键是表单字段的ID(也就是表单中文本框的ID),值就是要写入那个字段的内容。

如果你想用这种方式,我建议你先手动写好fdf文件,然后手动运行pdftk,确保它能正常工作,然后再用Python来自动化这个过程。这不是一个完美的解决方案,但结果看起来确实不错。

下面是我用来调用pdftk的代码,这会对你正确输入命令行语法有所帮助。

def pdftk(pdf_in, fdf_in, pdf_out):
    """
    Run pdftk to fill in pdf_out from the pdf form template and data given.
    (only tested on linux)

    """
    cmd_line = [pdftk_executable,
                pdf_in,
                "fill_form",
                fdf_in,
                "output",
                pdf_out,
                "verbose"]
    # print " ".join(cmd_line)
    try:
        pdftk_output = subprocess.check_output(cmd_line)
    except subprocess.CalledProcessError as e:
        pdftk_output = e.output
        pdftk_error = True
    return
2

你可以使用 reportlab 这个工具,这里有一个 教程。你可以通过 easy_install 来安装它。

撰写回答