Python中比较好用的PDF模块——发票金额提取

参考文档:常用Python PDF库对比

上文中:列举了几个常用的Python中PDF的模块。

我自己的应用场景是将发票金额提取,并用金额去命名pdf文件名。

经过个人测试:PyMuPDF模块效果显著。

Talk is cheap,I show you the code。

import os
import fitz
import shutil
'''
    支持滴滴行程单。
    # PyMuPDF模块:https://pymupdf.readthedocs.io/en/latest/tutorial.html#extracting-text-and-images
'''
root_dir = "./"
out_dir = "./output"
if not os.path.exists(out_dir):
    os.mkdir(out_dir)


def fapiao_read(text):
    if "¥" in text:
        print(text.split("¥")[-1].split("\n")[0])
        money = text.split("¥")[-1].split("\n")[0]
    elif "¥" in text:
        print(text.split("¥")[-1].split("\n")[0])
        money = text.split("¥")[-1].split("\n")[0]
    return money


def xingchengdan_read(text):
    print(text.split("合计")[1].split("元")[0].split()[0])
    money = text.split("合计")[1].split("元")[0].split()[0]
    return money


Repeat_name_list = []
for file in os.listdir("./"):
    if file.endswith(".pdf"):
        src = os.path.join(root_dir, file)
        doc = fitz.open(src)  # or fitz.Document(filename)
        page = doc.load_page(0)
        text = page.get_text("text")

        if "¥" in text or "¥" in text:
            if "敏感信息脱敏" in text and "敏感信息脱敏" in text:
                money = fapiao_read(text)
                out_file_name = "电子发票" + money + "元"
            else:
                continue
        else:
            money = xingchengdan_read(text)
            out_file_name = "电子发票" + money + "元行程单"
        Repeat_name_list.append(out_file_name)
        if out_file_name in Repeat_name_list:
            repeat_num = Repeat_name_list.count(out_file_name)
            if repeat_num == 1:
                out_file_name = out_file_name
            else:
                out_file_name = out_file_name + "(" + str(repeat_num-1) + ")"
        dst = os.path.join(out_dir, out_file_name+".pdf")
        shutil.copy(src, dst)

这个仅仅支持所有电子发票的pdf,同时支持滴滴发票和行程单的提取。其他pdf暂未考虑。因为我也用不到。

备注:据我观察人民币的“¥”符号,在发票中,有两种表现。代码中已经列出。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值