夜雨聆风学习资料网

ARTICLE · 1304848

PDF拆分:24页报销票,10秒拆成单页自动起名

PDF拆分:24页报销票,10秒拆成单页自动起名

你是不是也这样:财务只收单张发票,你手里是一个 24 页的报销汇总 PDF,想找出其中那张出租车票,只能打开文件翻半天,或者干脆截屏发过去。

我拿真实的 10 月报销汇总试了一次:24 页拆成 24 个单页文件,20 个自动起好了名——「01_出租车发票_58.00元.pdf」这种,一眼就知道是谁、多少钱;剩下 4 页是没有文字层的扫描件,脚本老实标了「需人工核对」,合计 2,220.80 元。全程 10 秒。

照着做,5 分钟(装库 1 分钟,剩下的等它跑完)。

先看效果

24 页里 20 页是电子票——有文字层,能读出「出租车发票」「酒店住宿发票」和 ¥金额;4 页是拍照扫描件,读不出字。扫描件它不猜、不编,直接标出来交给人,这个边界很重要。

拆分前是「第1页、第2页……」,拆完每个文件名自带类型和金额。报销人不用再打开 24 次文件找那一张票。

怎么做

装库,一条命令:

pip install pypdf

核心代码就这几行,存成 20261103-demo.py:

import os, re, sys from pypdf import PdfReader, PdfWriter  SRC = sys.argv[1] if len(sys.argv) > 1 else "10月报销票据汇总.pdf" OUT = "拆分结果"; os.makedirs(OUT, exist_ok=True)  def clean(s):     return re.sub(r'[\\/:*?"<>|\s]+', "", s)[:12]  reader = PdfReader(SRC) for i, page in enumerate(reader.pages, 1):     text = (page.extract_text() or "").strip()     if len(text) > 20:                      # 有文字层 = 电子票         m_type = text.split("\n")[0].strip()         m_amt  = re.search(r"[¥¥]\s*([0-9][0-9,]*\.?[0-9]{0,2})", text)         amt    = float(m_amt.group(1).replace(",", "")) if m_amt else 0.0         name   = f"{i:02d}_{clean(m_type)}_{amt:.2f}元.pdf"     else:                                   # 没文字层 = 扫描件         name = f"{i:02d}_需人工核对.pdf"     w = PdfWriter(); w.add_page(page)     with open(os.path.join(OUT, name), "wb") as f:         w.write(f)

跑:

python 20261103-demo.py 你的报销文件.pdf

跑完当前目录多一个「拆分结果」文件夹,24 个文件躺在里面。它只读原文件、只写新文件夹,你那份汇总 PDF 一根毫毛都不少。

踩过的坑

1. 扫描件读出来是空的,不是脚本坏了。 拍照生成的 PDF 没有文字层,pypdf 读到的是空字符串。要让它也自动命名,得上 OCR,那是另一篇文章的事。现在的处理是老实标「需人工核对」,4 页手工 2 分钟。

2. 金额只认 ¥ 后面的数字。 发票里「金额(大写)」那些行不用管,正则只抓第一个 ¥,实测 20 张全部抓对。

3. Windows 文件名里不能有 \ / : * ? " < > |,所以 clean() 会把它们和空格一起去掉。高铁票名字里的「南宁→玉林」那个箭头是合法的,会保留。

一页速查

你要做的
命令 / 操作
装库
pip install pypdf
拆分
python 20261103-demo.py 文件.pdf
结果在哪
当前目录 → 拆分结果\
扫描件
文件名带「需人工核对」,手工处理
判断有没有文字层
记事本打开 PDF 搜一个汉字,搜得到就有

下期工具包是《PDF 包》:合并、拆分、压缩、扫描件转可搜索,大概两周后。这篇的拆分是它的第一步,先单页用起来。

身边有每个月报销贴票贴到眼花的同事,把这个转给他——他今晚就能少翻 24 次文件。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料