如何使用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表单的主要内容,如果未能解决你的问题,请参考以下文章