|
- # 需要导入以下包
- import pdfplumber, os
- from openpyxl import Workbook
- import re
- wenjian = Workbook() # 创建存放发票信息的文件
- D = wenjian.active
- D.column_dimensions['A'].width = 40
- D.column_dimensions['B'].width = 20
- D.column_dimensions['C'].width = 30
- D.column_dimensions['D'].width = 40
- D.column_dimensions['E'].width = 20
- title = ["开票号码","开票日期", "买方信息","卖方信息","价税合计" ] # 先把要提取内容的抬头写入单元格
- for h in range(1, 6):
- D.cell(1, h, title[h - 1])
- # 下面是三种发票内容提取函数,其他格式我还没遇到
- def write_anotherthing(B, text):
- D = B.active
- s1 = re.findall('发票号码\s*[::]\s*(\d+)', text, re.DOTALL)
- s2 = re.findall('开票日期\s*[::]\s*(.*?)\n', text, re.DOTALL)
- s3 = re.findall('价税合计.*?[¥¥]\s*([\d.]+)', text, re.DOTALL)
- s4 = re.findall('[销售]\s*名称\s*[::]\s*(.*?)\s', text, re.DOTALL)
- s5 = re.findall('[购买]\s*名称\s*[::]\s*(.*?)\s', text, re.DOTALL)
- D.cell(i, 1, s1[0])
- D.cell(i, 2, s2[0])
- D.cell(i, 5, s3[0])
- D.cell(i, 4, s4[0])
- D.cell(i, 3, s5[0])
- print(s5,s3)
- i = 2 # 从表格第二行开始写入数据
- # 把需要提取的票PDF放在一个文件夹,下面开始提取文件名
- name = '电子发票' # 放待提取发票的文件夹名
- targetDir = fr"D:\{name}" # 存放待提取发票的完整路径
- # 下面三行提取所有发票PDF的文件名
- files = []
- for (dirpath, dirnames, filenames) in os.walk(targetDir):
- files += filenames
- # 开始读取每张发票内容,并判断属于什么类型发票
- for file in files:
- with pdfplumber.open(fr"D:\{name}\{file}") as pdf:
- # print(f"已轮到{file}")
- print(f'D:\{name}\{file}')
- A = pdf.pages[0]
- text = A.extract_text()
- search_string1 = "发票代码"
- search_string2 = "票据代码"
- write_anotherthing(wenjian, text)
- # print(f"{file}已印")
- i = i + 1
- # 提取好后保存文件
- wenjian.save(fr"D:\{name}\{name}.xlsx")
复制代码
|
|