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

发布时间:2026/9/27 13:59:06

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/9/8 13:44:48

零代码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/9/27 13:58:34

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

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

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

2026/9/26 23:20:42

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

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/26 19:14:12

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/27 1:30:37

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/27 1:30:35

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/27 1:30:34

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/26 16:36:51

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/26 13:57:22

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/26 23:35:16

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…