Python提取PDF发票信息并导入到Excel中

本篇文章将学习提取pdf发票信息,并将发票信息导入到Excel中。

使用到的Python库:

  • pdfplumber
  • Gooey
  • pyinstaller

背景

Python提取PDF发票信息并导入到Excel中

随着电子发票越来越普遍,企业使用的越来越多,在财务报账流程中需要将发票信息录入到财务系统(如K3)中,在这个过程中,通常有以下几个痛点:

  • 发票信息检查容易出错。
  • 手动录入发票信息效率十分低下。
  • 人工处理非常容易出错。
  • 电子发票文件名不规范,不容易区分。如:045001600111112565055.pdf

解决方案

做一个程序,自动提取发票中的文字信息,并保存到Excel中。

这样可以从Excel中检查发票信息是否完整,并且从Excel中复制或导入到财务系统中,大大提高了工作效率。

程序效果

程序界面

导入到Excel中

文件重命名

实现方法

发票识别

使用pdfplumber,安装命令pip install pdfplumber

import pdfplumber
import re
import os

def 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_file

def 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
Gooey是个适用于命令行的图形工具,也就是只做输入(有各种输入/选择框)和输出的情况,不适用于做界面展示,无法添加自定义按钮,如button等。使用print就能将输出内容显示到GUI图形界面上。

Gooey实例如下:

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()

Python提取PDF发票信息并导入到Excel中

打包为exe文件

使用pyinstaller将代码打包为exe文件
安装命令pip install pyinstaller
打包命令pyinstaller -F xxxxx.py -w (xxxxx.py改为具体的.py文件名)
等待打包完成,在代码对应的目录下会生成dist文件夹,打开后可以看到exe程序。

Python提取PDF发票信息并导入到Excel中

软件下载

当然你如果你有使用需求的话,可以查看此文章下载软件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python提取PDF发票信息并导入到Excel中 - Python技术站

(13)
上一篇 2023年2月3日
下一篇 2023年1月9日

相关文章

  • Spring Event观察者模式事件监听详解

    Spring Event观察者模式事件监听详解 什么是Spring Event Spring Event是Spring Framework中实现的一种事件通知机制。在Spring应用中,当某个事件发生时,Spring可以通知感兴趣的监听器执行相应的处理逻辑。这也被称为观察者模式。 Spring Event的使用步骤 创建事件 首先,需要定义一个事件类,例如:…

    python 2023年6月13日
    00
  • Python如何利用xlrd和xlwt模块操作Excel表格

    下面我将详细讲解一下如何利用Python中的xlrd和xlwt模块来操作Excel表格。 简介 xlrd和xlwt分别是Python中用于读取和写入Excel文件的第三方模块。其中,xlrd模块能够读取Excel文件中的数据和格式信息,并将其封装成Python对象;而xlwt模块则可以在Python环境中对Excel文件进行写入、修改和保存操作。这两个模块结…

    python 2023年5月13日
    00
  • python NumPy ndarray二维数组 按照行列求平均实例

    下面是关于“python NumPy ndarray二维数组按照行列求平均实例”的完整攻略: 一、需求说明 我们需要使用Python中NumPy库中的ndarray二维数组,对其按照行或者列进行平均,计算平均值后返回一个一维数组。 二、相关知识点 1. NumPy库 NumPy是Python语言的一个扩展程序库,支持大量针对数组的操作及其相关领域的数学函数。…

    python 2023年6月5日
    00
  • 使用python来玩一次股票代码详解

    使用Python来玩一次股票代码是一项非常有趣的任务,可以帮助我们更好地了解股票市场和Python编程语言。本文将详细讲解如何使用Python来玩一次股票代码,包括获取股票数据、绘制股票图表、计算技术指标等。 步骤1:获取股票数据 获取股票数据是使用Python来玩一次股票代码的第一步。我们可以使用pandas-datareader库来获取股票数据。以下是一…

    python 2023年5月15日
    00
  • python 写的一个爬虫程序源码

    Python编写爬虫程序攻略 什么是爬虫程序? 爬虫程序是通过网络爬取互联网上的信息和数据,并将它们转换成结构化数据的程序。结构化数据可以被用于数据分析、数据挖掘、机器学习等应用领域。 Python编写爬虫程序 Python是编写爬虫程序非常流行的语言,它有许多流行的爬虫框架,例如Scrapy、BeautifulSoup、Requests等。 爬取网站数据 …

    python 2023年5月14日
    00
  • Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解

    一、前言 随着AI技术的发展,文字识别技术也得到了广泛的应用,OCR(Text Optical Character Recognition)就是其中之一。腾讯OCR是腾讯云提供的一种文字识别服务,可以将图片中的文字识别出来。本文将介绍如何使用Python3进行腾讯OCR文字识别。 二、前提条件 在本教程中,我们需要以下几个前提条件: 已注册腾讯云账号(若没有…

    python 2023年5月18日
    00
  • 使用Python正则表达式操作文本数据的方法

    使用Python正则表达式操作文本数据的方法 正则表达式是一种强大的文本处理工具,可以用于各种文本处理,如数据清洗、文本分、信息提取等。Python中,我们使用re模块提供的函数来操作正表达式。本攻略将详细讲解Python中的re正则达式模块包括正则表达式的基本语法、常用函数等内容。 正表达式的基本语法 正则表达式是由普通和元字符组成的字符串。普表示它本身,…

    python 2023年5月14日
    00
  • python3 中的几种除法介绍,小数的不同显示

    下面是 Python3 中几种除法的介绍: 1. Python3 中的两种除法 在 Python3 中,除法主要分为两种类型:整数除法和浮点数除法。 整数除法(//):这种除法会得到一个整数解,这个解是向下取整的商,结果不包含小数部分。 浮点数除法(/):这种除法会得到精确的商,结果一定包含小数部分,可以是浮点数型的。 下面分别对这两种除法做详细说明: a.…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部