发票pdf文件解析

借助pdfplumber 解析

效果如下:

{

'发票号码(FPHM)': '24322000000011529984',

'开票日期(KPRQ)': '2024年01月11日',

'合计(HJ)': '1205.94',

'购方': '91320213586657279T',

'销方': '91320214MAD1N7EN36',

'价税合计(JSHJ)': '1218.00',

'项目(XM)-1': '餐饮 11205.940594059405 1205.94 1% 12.06'

}

1、安装

python 复制代码
pip install pdfplumber  -i https://pypi.tuna.tsinghua.edu.cn/simple

2、全部代码

python 复制代码
def getPdfText2(path):
    with pdfplumber.open(path) as pdf:
        page = pdf.pages[0]
        text = page.extract_text()
        print(text)
        # 提取发票表格上方内容
        invoice = {}
        ftype: int = 0  # 取购销方纳税识别号方式  1 是 纳税人识别号: 91320213586657279T ,2是只有18位数字
        item = re.search(r'发票号码(:|: |:)(\d+)', text)
        if item is not None:
            item = item.group()
            item = re.sub(r'发票号码(:|: |:)', '', item)
            item = item.replace(' ', '')
            invoice.update({"发票号码(FPHM)": item})
 
        item = re.search(r'开票日期(:|: |:)(.*)', text)
        if item is not None:
            item = item.group()
            item = re.sub(r'开票日期(:|: |:)', '', item)
            item = item.replace(' ', '')
            invoice.update({"开票日期(KPRQ)": item})
 
        item = re.search(r'机器编号(:|: |:)(\d+)', text)
        if item is not None:
            item = item.group()
            item = re.sub(r'机器编号(:|: |:)', '', item)
            item = item.replace(' ', '')
            invoice.update({"机器编号(JQBH)": item})
 
        item = re.search(r'发票代码(:|: |:)(\d+)', text)
        if item is not None:
            item = item.group()
            item = re.sub(r'发票代码(:|: |:)', '', item)
            item = item.replace(' ', '')
            invoice.update({"发票代码(FPDM)": item})
 
        item = re.search(r'校验码(:|: |:)(\d+)', text)
        if item is not None:
            item = item.group()
            item = re.sub(r'校验码(:|: |:)', '', item)
            item = item.replace(' ', '')
            invoice.update({"校验码(JYM)": item})
 
        item = re.search(r'合(\s+)计(.*)', text)
        if item is not None:
            item = item.group()
            item = item.replace(' ', '').replace('合计', '')
            item = re.search(r'¥(\d+).(\d+)', item).group()
            item = item.replace('¥', '')
            invoice.update({"合计(HJ)": item})
 
        # 购销方 纳税人识别号  方式1 (纳税人识别号: 913202006829704176)
        items = re.findall(r'纳税人识别号(:|: |:)(\w+)', text)
        if len(items) >= 2:
            invoice.update({"购方": items[0][1]})
            invoice.update({"销方": items[1][1]})
            ftype = 1
 
        if ftype == 0:
            # 购销方 纳税人识别号  方式2 (只有18位数字)
            items = re.findall(r'[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}', text)
            if len(items) == 2:
                invoice.update({"购方": items[0]})
                invoice.update({"销方": items[1]})
            if len(items) >= 2:
                invoice.update({"购方": items[1]})
                invoice.update({"销方": items[2]})
 
        item = re.search(r'(小写)(.*)', text)
        if item is not None:
            item = item.group()
            item = item.replace(' ', '').replace('小写)¥', '').replace('小写)¥', '')
            invoice.update({"价税合计(JSHJ)": item})
 
        items = re.findall(r'\*[\u4e00-\u9fa5]+\*(.*)', text)
        i: int = 1
        for item in items:
            invoice.update({"项目(XM)-" + str(i): item})
            i = i + 1
 
        print(invoice)
相关推荐
好家伙VCC15 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
前端玖耀里17 小时前
如何使用python的boto库和SES发送电子邮件?
python
serve the people17 小时前
python环境搭建 (十二) pydantic和pydantic-settings类型验证与解析
java·网络·python
小天源17 小时前
Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理
开发语言·windows·python·nssm·error 1053·error 1067
喵手17 小时前
Python爬虫实战:HTTP缓存系统深度实战 — ETag、Last-Modified与requests-cache完全指南(附SQLite持久化存储)!
爬虫·python·爬虫实战·http缓存·etag·零基础python爬虫教学·requests-cache
喵手17 小时前
Python爬虫实战:容器化与定时调度实战 - Docker + Cron + 日志轮转 + 失败重试完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·容器化·零基础python爬虫教学·csv导出·定时调度
2601_9491465318 小时前
Python语音通知接口接入教程:开发者快速集成AI语音API的脚本实现
人工智能·python·语音识别
寻梦csdn18 小时前
pycharm+miniconda兼容问题
ide·python·pycharm·conda
Java面试题总结19 小时前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
不懒不懒19 小时前
【决策树算法实战指南:从原理到Python实现】
python·决策树·id3·c4.5·catr