Python 自动化之批量处理 PDF 表单与合并——进阶实战案例

发布时间:2026/7/12 17:25:08

Python 自动化之批量处理 PDF 表单与合并——进阶实战案例
处理 PDF 表单PDF Form是办公自动化中一个比较高级的需求——批量填写合同模板、生成大量报表、提取表单数据。这篇用两个完整案例讲清楚。一、案例一批量填写 PDF 表单假设你有一份 PDF 合同模板里面有表单字段姓名、金额、日期等需要根据 Excel 数据批量填写并生成合同。1. 准备工作pipinstallpdfplumber PyPDF22. 查看 PDF 表单字段importpdfplumberdefinspect_form_fields(pdf_path):查看 PDF 中的表单字段信息withpdfplumber.open(pdf_path)aspdf:fori,pageinenumerate(pdf.pages):# 获取注释包括表单字段annotationspage.annotsifannotations:print(f第{i1}页表单字段:)foranninannotations:print(f -{ann.get(name,未命名)}: f类型{ann.get(subtype,)})3. 批量填写fromPyPDF2importPdfReader,PdfWriterimportpandasaspddeffill_pdf_form(template_path,output_path,data_dict): 填写 PDF 表单 template_path: 模板 PDF output_path: 输出 PDF data_dict: 字段名→值的字典 readerPdfReader(template_path)writerPdfWriter()pagereader.pages[0]# 更新表单字段writer.add_page(page)# 设置表单字段值writer.update_page_form_field_values(writer.pages[0],data_dict)# 保存withopen(output_path,wb)asf:writer.write(f)defbatch_fill_forms(template_path,excel_path,output_dir):根据 Excel 数据批量生成 PDF 合同importos os.makedirs(output_dir,exist_okTrue)dfpd.read_excel(excel_path)for_,rowindf.iterrows():# 构建字段数据data{name:row[客户名称],amount:str(row[金额]),date:str(row[签订日期]),contract_no:row[合同编号],}outputos.path.join(output_dir,f合同_{row[客户名称]}.pdf)fill_pdf_form(template_path,output,data)print(f已生成:{output})二、案例二提取 PDF 表单数据1. 提取已填写的表单defextract_form_data(pdf_path):提取 PDF 表单中的填写数据readerPdfReader(pdf_path)fieldsreader.get_form_text_fields()print(表单字段提取结果:)forfield_name,valueinfields.items():print(f{field_name}:{value})returnfieldsdefbatch_extract(pdf_dir,output_excel):批量提取多个 PDF 表单到 Excelimportos all_data[]forfinos.listdir(pdf_dir):iff.endswith(.pdf):fieldsextract_form_data(os.path.join(pdf_dir,f))fields[来源文件]f all_data.append(fields)ifall_data:dfpd.DataFrame(all_data)df.to_excel(output_excel,indexFalse)print(f共提取{len(all_data)}份表单:{output_excel})2. 提取不可填写的表格数据defextract_table_from_scanned(pdf_path): 从扫描件或不可填写的 PDF 中提取表格 适用于文字型 PDF 中的表格数据 importpdfplumberimportpandasaspdwithpdfplumber.open(pdf_path)aspdf:all_tables[]fori,pageinenumerate(pdf.pages):tablespage.extract_tables()fortableintables:iftableandlen(table)1:# 第一行为表头dfpd.DataFrame(table[1:],columnstable[0])all_tables.append(df)print(f第{i1}页找到表格:{len(table)}行)ifall_tables:resultpd.concat(all_tables,ignore_indexTrue)returnresultreturnNone3. 完整工作流defdaily_pdf_pipeline():每日 PDF 处理流水线print(开始 PDF 处理...)# 1. 提取表单数据form_dataextract_form_data(日报表.pdf)print(f提取到{len(form_data)}个字段)# 2. 提取表格数据table_dfextract_table_from_scanned(明细.pdf)iftable_dfisnotNone:table_df.to_excel(提取数据.xlsx,indexFalse)print(f导出{len(table_df)}行数据)# 3. 生成汇总报告# ...print(处理完成!)三、注意事项1. PDF 表单需要是 AcroForm 格式不是扫描件 2. 拍照/扫描件需要先 OCR 识别 3. 批量处理前先测试一个样本 4. 中文字体在 PDF 中需要嵌入否则显示方框 觉得有用的话点赞 关注【张老师技术栈】吧每周更新 Java/Python/爬虫 实战干货不让你白来。

相关新闻

零代码AI入门:3分钟掌握Teachable Machine图像识别技术

零代码AI入门:3分钟掌握Teachable Machine图像识别技术

2026/7/12 17:25:08

零代码AI入门:3分钟掌握Teachable Machine图像识别技术 【免费下载链接】teachablemachine-community Example code snippets and machine learning code for Teachable Machine 项目地址: https://gitcode.com/gh_mirrors/te/teachablemachine-community 在…

大疆上云API 1.10.0 媒体上传:文件指纹与精简指纹的3种应用场景解析

大疆上云API 1.10.0 媒体上传:文件指纹与精简指纹的3种应用场景解析

2026/7/12 17:25:08

大疆上云API 1.10.0 媒体上传:文件指纹与精简指纹的3种应用场景解析在无人机数据采集与处理的工作流中,媒体文件的高效传输一直是开发者关注的焦点。大疆上云API 1.10.0版本针对这一需求,引入了文件指纹(MD5)与精简指纹…

为什么选择sysBoost?OpenEuler Computing-docs中的性能优化黄金法则

为什么选择sysBoost?OpenEuler Computing-docs中的性能优化黄金法则

2026/7/12 17:25:08

为什么选择sysBoost?OpenEuler Computing-docs中的性能优化黄金法则 【免费下载链接】Computing-docs Documentation Repository Dedicated to Computing Features 项目地址: https://gitcode.com/openeuler/Computing-docs 前往项目官网免费下载&#xff1a…

AI驱动的开发效率度量体系:用数据驱动独立开发者的技术决策与成长路径

AI驱动的开发效率度量体系:用数据驱动独立开发者的技术决策与成长路径

2026/7/12 19:35:13

AI驱动的开发效率度量体系:用数据驱动独立开发者的技术决策与成长路径 一、当你想知道"我的开发效率到底如何"的时候 你第一次意识到需要度量开发效率,可能不是在年终总结的时候,而是在连续加班一周后仍然觉得"进度不理想&quo…

Fine-tuning 学习率策略:分层学习率衰减(Layer-wise Learning Rate Decay, LLRD)

Fine-tuning 学习率策略:分层学习率衰减(Layer-wise Learning Rate Decay, LLRD)

2026/7/12 19:35:13

Fine-tuning 学习率策略:分层学习率衰减(Layer-wise Learning Rate Decay, LLRD) flyfish 网络不同层级学到的特征,价值完全不一样。 以在 ImageNet 上预训练的 ConvNeXt 为例: 底层(靠近输入的 stage0、st…

5分钟快速上手Fullmoon:基于Redbean的轻量级Lua Web开发指南

5分钟快速上手Fullmoon:基于Redbean的轻量级Lua Web开发指南

2026/7/12 19:35:13

5分钟快速上手Fullmoon:基于Redbean的轻量级Lua Web开发指南 【免费下载链接】fullmoon Fast and minimalistic Redbean-based Lua web framework in one file. 项目地址: https://gitcode.com/gh_mirrors/fu/fullmoon Fullmoon是一个基于Redbean的轻量级Lua…

无需训练快速部署roop-unleashed:深度伪造AI换脸实战指南

无需训练快速部署roop-unleashed:深度伪造AI换脸实战指南

2026/7/12 19:35:13

无需训练快速部署roop-unleashed:深度伪造AI换脸实战指南 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 在AI换脸技术领域,传统方法…

Go-Mega前端交互增强:JavaScript魔法提升用户体验

Go-Mega前端交互增强:JavaScript魔法提升用户体验

2026/7/12 19:35:13

Go-Mega前端交互增强:JavaScript魔法提升用户体验 【免费下载链接】go-mega ✨🤟✨Go-Mega Tutorial for Go Web Develop | Demo: https://go-mega.herokuapp.com 项目地址: https://gitcode.com/gh_mirrors/go/go-mega Go-Mega是一个专注于Go We…

深夜出图总失败?:紧急修复Midjourney氛围崩坏的4种实时诊断法——从seed漂移到--s参数过载全链路排查

深夜出图总失败?:紧急修复Midjourney氛围崩坏的4种实时诊断法——从seed漂移到--s参数过载全链路排查

2026/7/12 19:25:13

更多请点击: https://kaifayun.com 第一章:深夜出图总失败?——Midjourney氛围崩坏的典型现象与归因框架 深夜提交提示词后,画面却频频偏离预期:本该静谧的雨夜咖啡馆,生成了赛博朋克霓虹废墟;…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/12 0:03:42

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/12 0:03:42

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/12 0:03:42

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/12 0:03:42

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/12 0:03:42

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/12 0:03:42

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…