news 2026/6/12 16:50:48

影刀RPA实操指南_PDF文档处理实战发票信息提取合同解析与批量报告生成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
影刀RPA实操指南_PDF文档处理实战发票信息提取合同解析与批量报告生成

影刀RPA实操指南:PDF文档处理实战——发票信息提取、合同解析与批量报告生成

影刀RPA处理PDF文件是很多财务和运营岗位的刚需。发票OCR提取信息、合同关键字段解析、批量生成PDF报告——这些事情手动干一整天,用影刀配合Python,10分钟搞定。

作者:林焱 | 影刀RPA实操系列


场景一:发票PDF信息提取

收到一堆电子发票PDF,需要提取:发票代码、发票号码、开票日期、金额、税额、销售方名称。




Python的pdfplumber库是专门干这个的:

拼多多店群自动化上架方案

importpdfplumberimportreimportpandasaspdimportosdefextract_invoice_info(pdf_path):"""从发票PDF提取核心字段"""result={'文件名':os.path.basename(pdf_path),'发票代码':'','发票号码':'','开票日期':'','金额':'','税额':'','销售方':''}withpdfplumber.open(pdf_path)aspdf:forpageinpdf.pages:text=page.extract_text()ifnottext:continue# 发票号码:通常是10位或20位数字invoice_no=re.search(r'发票号码[:\s]*(\d+)',text)ifinvoice_no:result['发票号码']=invoice_no.group(1)# 日期date_match=re.search(r'开票日期[:\s]*(\d{4}年\d{2}月\d{2}日)',text)ifdate_match:result['开票日期']=date_match.group(1)# 金额(小写合计)amount=re.search(r'小写[:\s]*[¥¥]?\s*([\d,]+\.\d{2})',text)ifamount:result['金额']=amount.group(1).replace(',','')# 税额tax=re.search(r'税额[:\s]*[¥¥]?\s*([\d,]+\.\d{2})',text)iftax:result['税额']=tax.group(1).replace(',','')# 销售方名称("名称:"后面的公司名称)seller=re.search(r'名称[:\s]*([\u4e00-\u9fff()\(\)有限公司]{4,40})',text)ifseller:result['销售方']=seller.group(1)returnresult# 批量处理defbatch_extract(folder_path):all_results=[]forfilenameinos.listdir(folder_path):iffilename.endswith('.pdf'):filepath=os.path.join(folder_path,filename)info=extract_invoice_info(filepath)all_results.append(info)print(f"处理完成:{filename}")# 保存结果df=pd.DataFrame(all_results)df.to_excel("发票信息汇总.xlsx",index=False)print(f"共处理{len(all_results)}张发票")

场景二:合同PDF关键条款解析

合同PDF需要提取:合同编号、甲方乙方、合同金额、生效日期、到期日期。

importpdfplumberimportrefromdatetimeimportdatetimedefextract_contract(pdf_path):result={'文件名':os.path.basename(pdf_path)}withpdfplumber.open(pdf_path)aspdf:full_text=''forpageinpdf.pages:text=page.extract_text()iftext:full_text+=text+'\n'# 合同编号contract_no=re.search(r'合同编号[::\s]*([A-Za-z0-9\-]+)',full_text)ifcontract_no:result['合同编号']=contract_no.group(1)# 甲方party_a=re.search(r'甲方[::\s]*[((]?甲方[))]?[::\s]*([\u4e00-\u9fff()()有限公司]{4,40})',full_text)ifnotparty_a:# 备选:"甲方:"后面的公司名称party_a=re.search(r'甲方[::]\s*([\u4e00-\u9fff()()有限公司]{4,40})',full_text)ifparty_a:result['甲方']=party_a.group(1)# 乙方(同理)party_b=re.search(r'乙方[::]\s*([\u4e00-\u9fff()()有限公司]{4,40})',full_text)ifparty_b:result['乙方']=party_b.group(1)# 合同金额amount=re.search(r'(?:合同.*?金额|总金额|合同总价)[::]*\s*[¥¥]?\s*([\d,]+(?:\.\d{1,2})?)',full_text)ifamount:result['合同金额']=amount.group(1).replace(',','')# 日期start_date=re.search(r'(?:生效日期|开始日期)[::]*\s*(\d{4}[-年]\d{1,2}[-月]\d{1,2}[日]?)',full_text)end_date=re.search(r'(?:终止日期|到期日期|结束日期)[::]*\s*(\d{4}[-年]\d{1,2}[-月]\d{1,2}[日]?)',full_text)ifstart_date:result['生效日期']=start_date.group(1)ifend_date:result['到期日期']=end_date.group(1)# 计算是否即将到期(30天内)try:end=datetime.strptime(end_date.group(1).replace('年','-').replace('月','-').replace('日',''),'%Y-%m-%d')days_left=(end-datetime.now()).days result['剩余天数']=days_left result['状态']='即将到期'ifdays_left<=30else'有效'except:passreturnresult

场景三:PDF报告自动生成

采集完数据,自动生成PDF报告。用reportlab库:

fromreportlab.lib.pagesizesimportA4fromreportlab.pdfgenimportcanvasfromreportlab.pdfbaseimportpdfmetricsfromreportlab.pdfbase.ttfontsimportTTFontfromdatetimeimportdatetimedefgenerate_report(data_summary,output_path):"""生成带图表的PDF报告"""# 注册中文字体(需要预先下载字体文件)# pdfmetrics.registerFont(TTFont('SimSun', 'C:/Windows/Fonts/simsun.ttc'))c=canvas.Canvas(output_path,pagesize=A4)width,height=A4# 标题c.setFont("Helvetica-Bold",20)c.drawString(50,height-50,f"自动化数据采集报告")# 生成日期c.setFont("Helvetica",12)c.drawString(50,height-80,f"生成时间:{datetime.now().strftime('%Y-%m-%d %H:%M')}")# 数据摘要c.setFont("Helvetica-Bold",14)c.drawString(50,height-130,"数据概览")c.setFont("Helvetica",12)y=height-160forkey,valueindata_summary.items():c.drawString(70,y,f"{key}{value}")y-=25# 表格区域c.setFont("Helvetica-Bold",14)c.drawString(50,y-10,"核心指标")# 画表格线table_top=y-40col_widths=[150,200,200]headers=['指标','今日','昨日']x_start=50fori,headerinenumerate(headers):c.setFont("Helvetica-Bold",10)c.drawString(x_start+sum(col_widths[:i]),table_top,header)# 底部说明c.setFont("Helvetica",9)c.drawString(50,30,"本报告由影刀RPA自动生成,如有疑问请联系数据分析团队。")c.save()print(f"报告已生成:{output_path}")

在影刀里调用

影刀流程中调用 Python 脚本处理 PDF:

1. 获取文件夹路径(用户输入或固定路径) 2. 执行Python脚本:batch_extract(folder_path) 3. 等待脚本执行完成 4. 读取生成的结果Excel:发票信息汇总.xlsx 5. [video(video-rFgNK1Ft-1781254005828)(type-csdn)(url-https://live.csdn.net/v/embed/524993)(image-https://v- ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/68e34978a8604af9ab18fc293b98419f.png#pic_center) blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(title-TEMU店群如何管理运营?)] 6. (可选)将结果发送到企业微信群 7. 移动已处理的PDF到 "processed" 文件夹

小结

PDF处理的三大场景:

  • 发票提取:pdfplumber + 正则,专门抓数字和金额
  • 合同解析:全文正则匹配,提取结构化字段
  • 报告生成:reportlab 自动排版输出

核心思路是"PDF转文本再用正则提取",不依赖特定的PDF排版,容错率高。


内容标签:影刀RPA / PDF处理 / pdfplumber / 发票提取 / 合同解析

作者:林焱

本文是「影刀RPA从零到实战」系列文章之一,持续更新实操技巧与避坑经验。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 16:48:51

终极本地流程图神器:5分钟掌握drawio-desktop的完整使用指南

终极本地流程图神器&#xff1a;5分钟掌握drawio-desktop的完整使用指南 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 想要在本地环境中安全高效地创建专业流程图吗&#xff…

作者头像 李华
网站建设 2026/6/12 16:44:09

Y2Down

链接&#xff1a;https://pan.quark.cn/s/e718a733e811Y2Down 是一款 YouTube 视频下载工具&#xff0c;可轻松保存视频或提取音频。它支持多种格式&#xff0c;包括最高可达 4K 分辨率的 MP4 视频以及 MP3 音频&#xff0c;确保高质量下载。Y2Down 以便捷和稳定为设计理念&…

作者头像 李华
网站建设 2026/6/12 16:43:13

高密度语音处理平台实战:MSC81x2 DSP农场卡架构与性能调优

1. 项目概述&#xff1a;从一块评估板卡说起在通信设备开发的圈子里&#xff0c;尤其是做媒体网关、远程接入服务器这类“大家伙”的时候&#xff0c;最头疼的问题之一就是语音处理能力。一个机框里要塞进成百上千路电话&#xff0c;每路都要做编解码、回声消除、静音检测&…

作者头像 李华
网站建设 2026/6/12 16:41:23

LanzouAPI:3步轻松获取蓝奏云直链,告别繁琐下载流程

LanzouAPI&#xff1a;3步轻松获取蓝奏云直链&#xff0c;告别繁琐下载流程 【免费下载链接】LanzouAPI 蓝奏云直链&#xff0c;蓝奏api&#xff0c;蓝奏解析&#xff0c;蓝奏云解析API&#xff0c;蓝奏云带密码解析 项目地址: https://gitcode.com/gh_mirrors/la/LanzouAPI …

作者头像 李华
网站建设 2026/6/12 16:41:16

计算机毕业设计之信息工程学院实验室使用系统

随着信息技术的飞速发展和教育改革的深入&#xff0c;传统的手工管理模式已难以满足日益增长的教学科研需求&#xff0c;存在效率低下、信息孤岛、资源分配不均等问题。信息工程学院实验室使用系统采用Java语言开发&#xff0c;依托Spring Boot框架构建后端服务&#xff0c;结合…

作者头像 李华