python怎么提取表单数据_如何在Python中从填写的表单中提取PDF字段?

我试图使用Python处理一些PDF表单,这些表单是使用Adobe Acrobat Reader填写并签名的。

我试过:演示:它没有转储任何已填写的数据。

pyPdf:当我试图用PdfFileReader(f)加载文件时,它使一个核心最大化了2分钟,而我刚刚放弃并杀死了它。

Jython和PDFBox:运行良好,但启动时间过长,如果这是我唯一的选择,我将用纯Java编写一个外部实用程序。

我可以继续寻找和尝试图书馆,但我希望有人已经有一个有效的解决方案。

更新:根据史蒂文的回答,我查看了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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值