年末了,报销比较多,很多替票比较细碎,比如说打车的电子票,打车软件接入了很多第三方的平台,这些打车平台在很多地方都开立了分公司,开出来的票就是这个平台在某个市开设的分公司的票,打印出来的票数量就呈几何倍地增长了。
为了让自己能更快更准确地整理发票,写了个 Python 小脚本。
# -*- coding: utf-8 -*-
import requests
import time
import hashlib
import base64
import json
# from urllib import parse
URL = "https://webapi.xfyun.cn/v1/service/v1/ocr/invoice"
APPID = "***"
API_KEY = "***"
def getHeader():
curTime = str(int(time.time()))
param = {"engine_type": "invoice"}
param = json.dumps(param)
# x_param = base64.b64encode(param.encode('utf-8'))
# param = "{\"auto_rotate\":\"true\"}"
paramBase64 = base64.b64encode(param.encode('utf-8'))
m2 = hashlib.md5()
str1 = API_KEY + curTime + str(paramBase64, 'utf-8')
m2.update(str1.encode('utf-8'))
checkSum = m2.hexdigest()
header = {
'X-CurTime': curTime,
'X-Param': paramBase64,
'X-Appid': APPID,
'X-CheckSum': checkSum,
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
}
return header
import fitz
import os
for (dirpath, dirnames, filenames) in os.walk("invoice"):
for i in filenames:
doc = fitz.open("invoice/" + i)
for page in doc:
pix = page.get_pixmap(dpi=240) # render page to an image
pix.save("temp.png") # store image as a PNG
with open(r'temp.png', 'rb') as f:
f1 = f.read()
f1_base64 = base64.b64encode(f1)
data = {
'image': f1_base64
}
# headers=getHeader(language, location)
r = requests.post(URL, data=data, headers=getHeader())
result = r.json()
print("%s\t%s\t%s" % (
result['data']['vat_invoice_haoma'],
result['data']['vat_invoice_goods_list'].split("\n")[0],
result['data']['vat_invoice_total_cover_tax_digits'],
))
使用方法:
- pip install requests && pip install PyMuPDF 安装依赖
- 到科大讯飞开发者平台 https://www.xfyun.cn/service/VAT-invoice-recg 申请一个 APPID 和 APPKEY,填到脚本开头那。
- 在脚本同级目录下创建一个 invoice 目录,把电子票的 pdf 文件放进去。
- python3 运行脚本,会得到如下结果。
5.然后粘贴到 excel 或者石墨表格里,就可以很方便地统计了。