WCEO 发表于 2022-6-15 09:28:00

PDF电子发票识别整理程序:PDF-->Excel

基于python的PDF识别,通过文字处理获取发票关键信息并展示到table上,导出Excel合并PDF等功能。
(因ocr部分不能打包exe,故ocr发票识别部分不可用)

WCEO 发表于 2022-6-15 09:30:00

链接:https://pan.baidu.com/s/1Mh6ZlZcZh83l09P_4gfbAA?pwd=WCEO
提取码:WCEO   --来自百度网盘超级会员V7的分享
Python编写的PDF电子发票识别程序_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1M5411R7UA?spm_id_from=333.999.0.0&vd_source=22f968c8f7c8841759849afd5058a215

WCEO 发表于 2022-6-15 09:32:00

import os
import pdfplumber as pb
import pandas as pd
import re
import openpyxl
from pathlib import Path
import sys
import shutil
from time import sleep
from tkinter import *
from tkinter import filedialog
# 遍历文件夹及其子文件夹中的文件,并存储在一个列表中
# 输入文件夹路径、空文件列表[]
# 返回 文件列表Filelist,包含文件名(完整路径)
def get_filelist(dir, Filelist):
    newDir=dir
    if os.path.isfile(dir):
      Filelist.append(dir)
      # # 若只是要返回文件文,使用这个
      # Filelist.append(os.path.basename(dir))
    elif os.path.isdir(dir):
      for s in os.listdir(dir):
      #如果需要忽略某些文件夹,使用以下代码
      #if s == "xxx":
      #continue
            newDir=os.path.join(dir, s)
            get_filelist(newDir, Filelist)
    return Filelist
def get_files(Filelist,dat):
    paths = []
    names=[]
    for file in Filelist:
      if file.split('.')[-1] in dat:
                paths.append(file)
                names.append(file.split('\\')[-1])
    return paths,names
def get_dic(page,name,m):
    dic = {}
    text = page.extract_text()
    gongsi = re.findall(r'[一-龟]+公司|个人', text)
    gongsi =
    dic['文件名'] = name.replace(".pdf", "_") + str(m + 1)
    dic['发票代码'] = re.findall(r'\d{12}', text)
    dic['发票号码'] = re.findall(r'\d{8}', text)
    da = re.findall(r'[\d ]+年[\d ]+月[\d ]+日', text)
    dic['开票日期'] = re.sub(r'年|月|日| ', '', da)
    da = re.findall(r'[\d ]{20,30}', text)
    dic['校验码'] = da.replace(' ', '')
    try:
      dic['税率'] = re.findall(r'免税|不征税|1{0,1}%', text)[-1]
    except:
      dic['税率'] = ''
    dic['价税合计(小写)'] = re.findall(r'[¥|¥]{0,1}\d+\.\d+', text)[-1]
    dic['购买方名称'] = gongsi
    dic['销售方名称'] = gongsi[-1]
    da = re.findall(r'(?1:
      dic['备注'] = re.sub(r'\n销 备 |\n纳税人识别号', '', da[-1])
    else:
      dic['备注'] = ''
    return dic
if __name__=="__main__":
    root = Tk()
    root.withdraw()
    ####rootDir = str(Path(sys.argv).parent)
    rootDir =filedialog.askdirectory()#指定存储电子发票的文件夹
    filelist = get_filelist(rootDir, [])#遍历文件夹里的全部文件
    paths, names = get_files(filelist, ['pdf'])#判断PDF文件,返回PDF文件的路径和文件名
    data=[]
    for n in range(len(paths)):
      pdf = pb.open(paths)#打开PDF文件
      m = 0
      for page in pdf.pages:#遍历PDF文件的每一页
            if '开票人' in page.extract_text():#通过判断是否包含“开票人”,判断是否为电子发票(有的发票跟着行程或税务清单需排除掉)
                dic=get_dic(page,names,m)#获取电子发票的关键信息
                data +=
            m+=1
      pdf.close()
    #保存到Excel
    wb = openpyxl.Workbook()
    ws = wb.active
    ws.append(list(dic.keys()))
    for d in data:
      ws.append(list(d.values()))
    wb.save(rootDir+"\\已识别发票信息.xlsx")

mikewolf2k 发表于 2022-6-15 17:10:00

最关心的是OCR识别部分,请问这部分用的是什么?

czb203 发表于 2022-6-17 10:50:00

牛叉叉

flowerson 发表于 2022-6-20 11:46:00

有完整的源代码学习吗?
页: [1]
查看完整版本: PDF电子发票识别整理程序:PDF-->Excel