Python提取PDF发票信息保存Excel文件并制作EXE程序
前言
通过本篇文章可学习pdf
发票信息的提取,内容保存至Excel
,了解命令图像工具Gooey
,以及如何将python文件打包为exe
程序
背景
现在电子发票越来越普遍,各公司开票形式已基本无纸化。目前所在公司的情况是,每个人自己报账,需要将发票信息(发票号/金额)填如K3系统进行流程申请,另外将电子发票打印为纸质并贴票后找领导签字及审批K3的流程;之后在将纸质单据送至财务审批。如果财务发现数据填写不正确,就会将流程和单据打回来,又要重新找领导签字审批,相当麻烦。
分析
为了减少报账被打回来的情况,我们先分析,整个报账过程中,存在的问题
下载回来的发票文件命名不规范不容易识别
如:04500160011131347550.pdf
填K3时需要复制发票号和金额,还要选择发票类型
每次要打开pdf发票复制发票号和金额
发票可能存在错误情况:如公司名称或纳税人识别号不正确
每次还要检查一下
优化
一开始的想法是,做一个程序,识别发票信息并提供复制按钮,方便复制到k3。自动检查发票信息是否完整正确,公司名称和纳税人识别号是否正确,如不正确则提示错误,另外自动将文件重名称,及一键打印功能。
不过由于对Python的GUI还不大熟悉,就改了方式:将发票信息提取至Excel,在自己到Excel上复制信息和检查发票是否完整,另外将文件重命名为开票公司+金额的形式
最终效果
实现
读取pdf发票
使用pdfplumber,安装命令pip install pdfplumber
,
import pdfplumber
import re
import osdef re_text(bt, text):m1 = re.search(bt, text)if m1 is not None:return re_block(m1[0])def re_block(text):return text.replace(' ', '').replace(' ', '').replace(')', '').replace(')', '').replace(':', ':')def get_pdf(dir_path):pdf_file = []for root, sub_dirs, file_names in os.walk(dir_path):for name in file_names:if name.endswith('.pdf'):filepath = os.path.join(root, name)pdf_file.append(filepath)return pdf_filedef read():filenames = get_pdf('C:\Users\Administrator\Desktop\a') # 修改为自己的文件目录for filename in filenames:print(filename)with pdfplumber.open(filename) as pdf:first_page = pdf.pages[0]pdf_text = first_page.extract_text()if '发票' not in pdf_text:continue# print(pdf_text)print('--------------------------------------------------------')print(re_text(re.compile(r'[\u4e00-\u9fa5]+电子普通发票.*?'), pdf_text))t2 = re_text(re.compile(r'[\u4e00-\u9fa5]+专用发票.*?'), pdf_text)if t2:print(t2)# print(re_text(re.compile(r'发票代码(.*\d+)'), pdf_text))print(re_text(re.compile(r'发票号码(.*\d+)'), pdf_text))print(re_text(re.compile(r'开票日期(.*)'), pdf_text))print(re_text(re.compile(r'名\s*称\s*[::]\s*([\u4e00-\u9fa5]+)'), pdf_text))print(re_text(re.compile(r'纳税人识别号\s*[::]\s*([a-zA-Z0-9]+)'), pdf_text))price = re_text(re.compile(r'小写.*(.*[0-9.]+)'), pdf_text)print(price)company = re.findall(re.compile(r'名.*称\s*[::]\s*([\u4e00-\u9fa5]+)'), pdf_text)if company:print(re_block(company[len(company)-1]))print('--------------------------------------------------------')read()
通过上述代码可以实现对pdf发票的内容识别和输出功能,完整的功能请通过学习本文后续的内容自主实现。
写入Excel
使用xlwt写Excel文件,安装命令pip install xlwt
,一个简单的例子如下
import xlwt# 创建工作簿
wb = xlwt.Workbook()
# 创建表单
sh = wb.add_sheet('sheet 1')
# 写入数据
sh.write(0, 1, '姓名')
# 保存
wb.save('test.xls')
创建图像界面
使用Gooey创建GUI图像界面,安装命令pip install Gooey
官网地址:https://github.com/chriskiehl/Gooey 目前是:15.4k stars
这里对Gooey的适用情况做一个说明,Gooey适用于命令行的图形工具,也就是只做输入(有各种输入/选择框)和输出的情况,不适用于做界面展示,无法添加自定义按钮,如button等。使用print就能将输出内容显示到GUI图形界面上
一个简单的例子
from gooey import Gooey, GooeyParser@Gooey(program_name="简单的实例")
def main():parser = GooeyParser(description="第一个示例!")parser.add_argument('文件路径', widget="FileChooser") # 文件选择框parser.add_argument('日期', widget="DateChooser") # 日期选择框args = parser.parse_args() # 接收界面传递的参数print(args)if__name__ == '__main__':main()
打包为exe文件
使用pyinstaller将代码打包为exe文件
安装命令pip install pyinstaller
打包命令pyinstaller -F xxxxx.py -w
(xxxxx.py改为具体的.py文件名)
等待打包完成,在代码目录的会生成dist
文件夹,打开后可以看到exe程序
注意:程序有中文输出的请查看该文章,避免打包后程序无法正常运行https://www.jianshu.com/p/6b98cdbdcfae
Python提取PDF发票信息保存Excel文件并制作EXE程序相关推荐
- python提取pdf发票信息_PDF电子发票内容提取
网页版程序使用地址:[在线使用](https://www.yooongchun.com/apps) 摘要 本文介绍如何提取PDF版电子发票的内容. 1. 加载内容 首先使用Python的pdfplum ...
- python提取pdf发票信息_python读取pdf(发票)
想读取文件夹*.pdf格式的发票并写入到excel当中,当然也可以写入txt(注释代码有) 详见下面代码,代码开头有参考的几篇文章的地址 一开始用的是pdfplumber,不好用,识别率不高,后来使用 ...
- 实用脚本!Python 提取 PDF 指定内容生成新文件!
很多时候,我们并不会预知希望提取的页号,而是希望将包含指定内容的页面提取合并为新PDF,本文就以两个真实需求为例进行讲解. 01 需求描述 数据是一份有286页的上市公司公开年报PDF,大致如下 现在 ...
- python使用xlwt创建与保存excel文件
xlwt处理excel的思想是先创建一个excel文件:book,然后创建sheet表:sheet,最后对sheet表内的单元格:cell写入数据. 小栗子: import xlwtif __name ...
- python提取pdf表格信息
借助camelot这个包 import camelot import pandas as pddef table_mining(pdf_path):tables = camelot.read_pdf( ...
- python如何保存excel文件
你可以使用 Python 的第三方库来保存 Excel 文件.比较常用的有 openpyxl 和 pandas. 使用 openpyxl 库,你可以这样保存 Excel 文件: from openpy ...
- 利用Python提取PDF文件中的文本信息
如何利用Python提取PDF文件中的文本信息 日常工作中我们经常会用到pdf格式的文件,大多数情况下是浏览或者编辑pdf信息,但有时候需要提取pdf中的文本,如果是单个文件的话还可以通过复制粘贴来直 ...
- 用python提取PDF表格内容保存到excel
一 提取pdf方法介绍 任务是用python提取PDF里的表格文件到excel里面去.做为一个 学了一个周python的人来说当然像尝试一下看能不能做到,事实证明是可以的只是可能代码有点烂...... ...
- 如何保存PDF、Word和Excel文件到数据库中
在项目中,有时候我们很需要把PDF.Word和Excel文档等等上传到数据库,以便日后使用.今天这篇文章向大家讲解如何将这些文件保存到数据库的. 详细步骤 第一步:打开数据库,单击新建查询,创建一个名 ...
最新文章
- 【正一专栏】巴萨西甲冠军遇到挑战
- 求最短路径——BFS、Dijkstra、Prim算法对比
- Linux睡眠唤醒机制分析--以IMX6UL为例
- AppleScript: Handler
- html水调歌头实验总结,水调歌头明月几时有反思小结
- 苹果损失超 1000 万美元,前员工被控收回扣、盗窃、欺诈
- Python合成PDF文件
- 第三届同花顺算法大赛 | 2022 | AI算法
- image caption学习笔记
- 面试系列-2 我终于弄清楚了redis数据结构之string应用场景
- 尚医通【预约挂号系统】总结
- 智能小车的超声波避障
- threejs 实现小飞机建模
- 翻译软件哪个准确度高
- 西门子PLM EMEA营销总监:大数据、供应链以及数据安全
- ubuntu系统安装Nvdia Quadro P4000显卡驱动
- VR浏览器,能否引爆新场景下的“入口之战“?
- 北京软件开发公司排行榜最新
- 如何合并多个PDF图为一张PDF图?(矢量无损,最简单)
- 利用软件工具高效实施推行CMMI、GJB5000A体系
热门文章
- 如何用环信SDK一步一步实现视频会议(详细版)
- 跨境电商海关报关申报系统
- usermod命令、用户密码管理以及mkpasswd命令
- “数聚上海 共赢未来” 上海大数据产业高端峰会 Cloudera让大数据实现更多价值...
- 【计算机图形学】“Grabcut“Interactive Foreground Extraction using Iterated Graphcuts
- 邀请函 | 区块链如何助力公益?腾讯、深大、微众专家齐聚ESG系列研讨会
- “虚拟教练”,运动员必备
- DeepSpeed零冗余优化器Zero Redundancy Optimizer
- 【Grails4+spring security】
- 10年老司机告诉你,怎选光缆通讯配件?