如何使用Python填写PDF表单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Python填写PDF表单相关的知识,希望对你有一定的参考价值。

我有一个使用PDF form创建的Adobe LiveCycle Designer ES 10.4。我需要使用Python来填充它,这样我们就可以减少手工劳动。我在网上搜索并阅读了一些文章,其中大多数都围绕pdfrw库,我尝试使用它并从PDF form中提取一些信息,如下所示

from pdfrw import PdfReader
pdf = PdfReader('sample.pdf')
print(pdf.keys())
print(pdf.Info)
print(pdf.Root.keys())
print('PDF has {} pages'.format(len(pdf.pages)))

产量

['/Root', '/Info', '/ID', '/Size']
{'/CreationDate': "(D:20180822164509+05'30')", '/Creator': '(Adobe LiveCycle Designer ES 10.4)', '/ModDate': "(D:20180822165611+05'30')", '/Producer': '(Adobe XML Form Module Library)'}
['/AcroForm', '/MarkInfo', '/Metadata', '/Names', '/NeedsRendering', '/Pages', '/Perms', '/StructTreeRoot', '/Type']
PDF has 1 pages

我不知道如何进一步使用pdfrw从PDF表单访问可填写字段并使用Python填充它是否可能。任何的意见都将会有帮助。

答案

使用PDFix SDK的基于AcroForm的表单

def SetFormFieldValue(email, key, open_path, save_path):
    pdfix  = GetPdfix()
    if pdfix is None:
        raise Exception('Pdfix Initialization fail')
    if not pdfix.Authorize(pdfix_email, pdfix_license):
        raise Exception('Authorization fail : ' + pdfix.GetError())
    doc = pdfix.OpenDoc(open_path, "")
    if doc is None:
        raise Exception('Unable to open pdf : ' + pdfix.GetError())
    field = doc.GetFormFieldByName("Text1")
    if field is not None:
        value = field.GetValue()
        value = "New Value"
        field.SetValue(value)
    if not doc.Save(save_path, kSaveFull):
        raise Exception(pdfix.GetError())
    doc.Close()
    pdfix.Destroy()
另一答案

您可以在此处找到表单字段:

pdf.Root.AcroForm.Fields

或者在这里

pdf.Root.Pages.Kids[page_index].Annots

这是一个PdfArray对象。基本上是一个清单。该字段的名称可在此处找到:

pdf.Root.AcroForm.Fields[field_index].T

其他键包括值.V有一堆显示信息,如.AP.N.Resources下的字体等

但是,如果更新字段的值并输出pdf文件。它可能仅在字段具有焦点时显示该值,即单击该值。

我还没弄明白如何解决这个问题。

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

如何使用 pdfbox 用特定字体填写 PDF 表单?

Python PDF 表单展平

如何使用 pdf 创建可填写和可保存的表单

如何在php中填写PDF表单

带有可填写表单域的 PDF +“另存为”=带有固定文本的 PDF - 如何?

保留 PDF 表单域