我正在尝试使用Python处理一些使用Adobe Acrobat Reader填写并签名的PDF表单。
我试过了:
我可以继续寻找图书馆并尝试使用它们,但我希望有人已经对此提供了有效的解决方案。
更新: 根据史蒂文的答案,我研究了pdfminer,它的技巧很好。
from argparse import ArgumentParser
import pickle
import pprint
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdftypes import resolve1, PDFObjRef
def load_form(filename):
"""Load pdf form contents into a nested list of name/value tuples"""
with open(filename, 'rb') as file:
parser = PDFParser(file)
doc = PDFDocument()
parser.set_document(doc)
doc.set_parser(parser)
doc.initialize()
return [load_fields(resolve1(f)) for f in
resolve1(doc.catalog['AcroForm'])['Fields']]
def load_fields(field):
"""Recursively load form fields"""
form = field.get('Kids', None)
if form:
return [load_fields(resolve1(f)) for f in form]
else:
# Some field types, like signatures, need extra resolving
return (field.get('T').decode('utf-16'), resolve1(field.get('V')))
def parse_cli():
"""Load command line arguments"""
parser = ArgumentParser(description='Dump the form contents of a PDF.')
parser.add_argument('file', metavar='pdf_form',
help='PDF Form to dump the contents of')
parser.add_argument('-o', '--out', help='Write output to file',
default=None, metavar='FILE')
parser.add_argument('-p', '--pickle', action='store_true', default=False,
help='Format output for python consumption')
return parser.parse_args()
def main():
args = parse_cli()
form = load_form(args.file)
if args.out:
with open(args.out, 'w') as outfile:
if args.pickle:
pickle.dump(form, outfile)
else:
pp = pprint.PrettyPrinter(indent=2)
file.write(pp.pformat(form))
else:
if args.pickle:
print pickle.dumps(form)
else:
pp = pprint.PrettyPrinter(indent=2)
pp.pprint(form)
if __name__ == '__main__':
main()
您应该能够使用pdfminer做到这一点,但这将需要深入研究pdfminer的内部结构以及有关pdfhtml" target="_blank">格式的知识(当然是wrt形式,但也需要了解pdf的内部结构,例如“字典”和“间接对象”)
。
该示例可能会为您提供帮助(我认为它仅适用于简单情况,没有嵌套字段等)。
import sys
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdftypes import resolve1
filename = sys.argv[1]
fp = open(filename, 'rb')
parser = PDFParser(fp)
doc = PDFDocument(parser)
fields = resolve1(doc.catalog['AcroForm'])['Fields']
for i in fields:
field = resolve1(i)
name, value = field.get('T'), field.get('V')
print '{0}: {1}'.format(name, value)
编辑:忘记提及:如果您需要提供密码,请将其传递给 doc.initialize()
问题内容: 我有一些PDF表单,我想用Django Web应用程序中的数据自动填充,然后提供给用户下载。哪个python库可以让我轻松地预填充PDF表单?这些表格旨在打印出来。 问题答案: 如果你要生成非常动态的PDF,并且需要以编程方式控制所有PDF(数据和布局),则Reportlab非常有用。 仅在现有的PDF中填写表格,reportlab是过大的,基本上,你将不得不在reportlab中从头
我是新的PDF框,需要填写的信息在PDF表单,其中有节和字段名: 填写信息的名称和框 地址和填写信息的框 城市框来填充信息。 目前没有错误上面的代码正在工作填写一些垃圾字段。 需要用方框信息填满姓名,方框信息填满姓名,方框信息填满地址,方框信息填满地址,方框信息填满地址
我在页面上有一个表单,用户可以在其中保存信息,还有一个下拉列表,可以从保存文件的目录中提取这些保存的文件。我想要的是当他们进入该页面时,当他们从下拉框中选择文件名时,它会将文件名放在输入框“CodeDescription”字段中,并将文件信息放在文本区域“Code”中,但我不确定如何解析该文件。下面是我当前的代码。 或者,相反地,我不介意在下拉菜单中选择正确的文件时,它只是在表单字段下面显示输出。
问题内容: 是否有任何支持表识别和提取的开源库? 我的意思是: 识别表结构存在 根据内容对表格进行分类 以有用的输出格式(例如JSON / CSV等)从表中提取数据。 我浏览了有关此主题的类似问题,发现以下内容: PDFMiner解决了问题3,但似乎要求用户向PDFMiner指定每个表都存在表结构的地方(如果我错了,请纠正我) pdf-table-extract尝试解决问题1,但根据“待办事项”列
我正在尝试使用Python从PDF文件中提取文本。我的主要目标是创建一个程序,读取银行对账单并提取其文本,以更新excel文件,方便记录每月的支出。现在我只专注于从pdf文件中提取文本,但我不知道怎么做。 目前将PDF文件中的文本提取为字符串的最佳且最简单的方法是什么?今天最适合使用的图书馆是什么?我该怎么做? 我尝试过使用PyPDF2,但每次我尝试使用extractText()从任何页面提取文本
问题内容: 我将提取字符串中包含的所有数字。哪个更适合pur 例: 结果: 问题答案: 如果只想提取正整数,请尝试以下操作: 我认为这比正则表达式示例更好,原因有三点。首先,你不需要其他模块;其次,它更具可读性,因为你无需解析迷你语言;第三,它更快(因此可能更): 这将无法识别浮点数,负整数或十六进制格式的整数。如果你不能接受这些限制,则可以通过以下亭亭玉立的答案解决问题。