年末了,报销比较多,很多替票比较细碎,比如说打车的电子票,打车软件接入了很多第三方的平台,这些打车平台在很多地方都开立了分公司,开出来的票就是这个平台在某个市开设的分公司的票,打印出来的票数量就呈几何倍地增长了。

为了让自己能更快更准确地整理发票,写了个 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'],
        ))

使用方法:

  1. pip install requests && pip install PyMuPDF 安装依赖
  2. 到科大讯飞开发者平台 https://www.xfyun.cn/service/VAT-invoice-recg 申请一个 APPID 和 APPKEY,填到脚本开头那。
  3. 在脚本同级目录下创建一个 invoice 目录,把电子票的 pdf 文件放进去。
  4. python3 运行脚本,会得到如下结果。

5.然后粘贴到 excel 或者石墨表格里,就可以很方便地统计了。