前言

通过本篇文章可学习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程序相关推荐

  1. python提取pdf发票信息_PDF电子发票内容提取

    网页版程序使用地址:[在线使用](https://www.yooongchun.com/apps) 摘要 本文介绍如何提取PDF版电子发票的内容. 1. 加载内容 首先使用Python的pdfplum ...

  2. python提取pdf发票信息_python读取pdf(发票)

    想读取文件夹*.pdf格式的发票并写入到excel当中,当然也可以写入txt(注释代码有) 详见下面代码,代码开头有参考的几篇文章的地址 一开始用的是pdfplumber,不好用,识别率不高,后来使用 ...

  3. 实用脚本!Python 提取 PDF 指定内容生成新文件!

    很多时候,我们并不会预知希望提取的页号,而是希望将包含指定内容的页面提取合并为新PDF,本文就以两个真实需求为例进行讲解. 01 需求描述 数据是一份有286页的上市公司公开年报PDF,大致如下 现在 ...

  4. python使用xlwt创建与保存excel文件

    xlwt处理excel的思想是先创建一个excel文件:book,然后创建sheet表:sheet,最后对sheet表内的单元格:cell写入数据. 小栗子: import xlwtif __name ...

  5. python提取pdf表格信息

    借助camelot这个包 import camelot import pandas as pddef table_mining(pdf_path):tables = camelot.read_pdf( ...

  6. python如何保存excel文件

    你可以使用 Python 的第三方库来保存 Excel 文件.比较常用的有 openpyxl 和 pandas. 使用 openpyxl 库,你可以这样保存 Excel 文件: from openpy ...

  7. 利用Python提取PDF文件中的文本信息

    如何利用Python提取PDF文件中的文本信息 日常工作中我们经常会用到pdf格式的文件,大多数情况下是浏览或者编辑pdf信息,但有时候需要提取pdf中的文本,如果是单个文件的话还可以通过复制粘贴来直 ...

  8. 用python提取PDF表格内容保存到excel

    一 提取pdf方法介绍 任务是用python提取PDF里的表格文件到excel里面去.做为一个 学了一个周python的人来说当然像尝试一下看能不能做到,事实证明是可以的只是可能代码有点烂...... ...

  9. 如何保存PDF、Word和Excel文件到数据库中

    在项目中,有时候我们很需要把PDF.Word和Excel文档等等上传到数据库,以便日后使用.今天这篇文章向大家讲解如何将这些文件保存到数据库的. 详细步骤 第一步:打开数据库,单击新建查询,创建一个名 ...

最新文章

  1. 【正一专栏】巴萨西甲冠军遇到挑战
  2. 求最短路径——BFS、Dijkstra、Prim算法对比
  3. Linux睡眠唤醒机制分析--以IMX6UL为例
  4. AppleScript: Handler
  5. html水调歌头实验总结,水调歌头明月几时有反思小结
  6. 苹果损失超 1000 万美元,前员工被控收回扣、盗窃、欺诈
  7. Python合成PDF文件
  8. 第三届同花顺算法大赛 | 2022 | AI算法
  9. image caption学习笔记
  10. 面试系列-2 我终于弄清楚了redis数据结构之string应用场景
  11. 尚医通【预约挂号系统】总结
  12. 智能小车的超声波避障
  13. threejs 实现小飞机建模
  14. 翻译软件哪个准确度高
  15. 西门子PLM EMEA营销总监:大数据、供应链以及数据安全
  16. ubuntu系统安装Nvdia Quadro P4000显卡驱动
  17. VR浏览器,能否引爆新场景下的“入口之战“?
  18. 北京软件开发公司排行榜最新
  19. 如何合并多个PDF图为一张PDF图?(矢量无损,最简单)
  20. 利用软件工具高效实施推行CMMI、GJB5000A体系

热门文章

  1. 如何用环信SDK一步一步实现视频会议(详细版)
  2. 跨境电商海关报关申报系统
  3. usermod命令、用户密码管理以及mkpasswd命令
  4. “数聚上海 共赢未来” 上海大数据产业高端峰会 Cloudera让大数据实现更多价值...
  5. 【计算机图形学】“Grabcut“Interactive Foreground Extraction using Iterated Graphcuts
  6. 邀请函 | 区块链如何助力公益?腾讯、深大、微众专家齐聚ESG系列研讨会
  7. “虚拟教练”,运动员必备
  8. DeepSpeed零冗余优化器Zero Redundancy Optimizer
  9. 【Grails4+spring security】
  10. 10年老司机告诉你,怎选光缆通讯配件?