Python PDF 表单展平

Posted

技术标签:

【中文标题】Python PDF 表单展平【英文标题】:Python PDF form flattening 【发布时间】:2019-03-05 07:40:12 【问题描述】:

如何“展平” PDF 表单?我有一个 PDF 表格需要填写。我有一个简单的例子,其中 TEMP_FORM.pdf 是 from,data_dict 是要填写在 TEMP_FORM.pdf 中的值。输出文件保存为 FORM1.pdf 但仍可编辑我需要展平该文件以便无法编辑该值。

from PyPDF2 import PdfFileReader, PdfFileWriter

TEMPLATE_PATH = 'TEMP_FORM.pdf'
OUTPUT_PATH = 'FORM1.pdf'
data_dict = 
    'name': 'XYZ',
    'address': 'PQR',
    'email': 'xyz@gmail.com',
    'send_date': '2018-02-13',
    'due_date': '2018-03-13'


if __name__ == '__main__':
    input_file = PdfFileReader(open(TEMPLATE_PATH, "rb"))

    output_file = PdfFileWriter()
    output_file.addPage(input_file.getPage(0))
    output_file.updatePageFormFieldValues(output_file.getPage(0), data_dict)
    output_stream = open(OUTPUT_PATH, "wb")

    output_file.write(output_stream)
    output_stream.close()

【问题讨论】:

你能解释一下这里的“扁平化”是什么意思吗?示例输入和输出会有所帮助。谢谢 使用 PDF 可填写表单时,用户必须在填写完表单字段后锁定或“展平” PDF 文档,以确保可以在所有设备上查看文档并防止其他用户操作或编辑信息。在CM/ECF中归档和存储的文件一旦归档就不能更改;但是,拼合表单将阻止任何用户保存文档和编辑表单字段。 我认为这个问题需要一些重组。该代码示例是关于以编程方式填写 pdf 表单。但是在您的评论中,您谈论的是用户编辑文件,大概是手动的。阻止用户保存文件肯定是用户正在使用的服务的属性吗? PdfFileWriter 的文档:pythonhosted.org/PyPDF2/PdfFileWriter.html 没有谈到锁定文件。不过,有一种编写元数据的方法,可能是您正在寻找的?总而言之,我认为这个问题需要更新才能更具体。谢谢 【参考方案1】:

根据 Adob​​e Docs,您可以将可编辑表单字段的位位置更改为 1 以使其只读。我在这里提供了一个完整的解决方案,但它使用了 Django:

https://***.com/a/55301804/8382028

Adobe Docs(第 552 页):

https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf

使用 PyPDF2 填充字段,然后遍历注释并执行以下操作:

for j in range(0, len(output_file['/Annots'])):
    writer_annot = output_file['/Annots'][j].getObject()
    for field in data_dict: 
        if writer_annot.get('/T') == field:
            writer_annot.update(
                NameObject("/Ff"): NumberObject(1)   # make ReadOnly
            )

【讨论】:

以上是关于Python PDF 表单展平的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 生成平面 PDF

使用 PDFBox 为扁平化 PDF 表单嵌入字体

保留 PDF 表单域

PDF 表单与 itext 合并。 C#

PDFBox 字段值在展平后无法显示

用 PHP 填写 PDF 表单 [关闭]