Install
openclaw skills install @leahlu0124-creator/invoice-pdf-merge发票PDF智能合并工具。多张发票+行程单自动配对拼版到A4纸(2合1),保持文字可选中,落单发票自动两两合并省纸,自动删除空白尾页。纯排版工具,不含数据提取。
openclaw skills install @leahlu0124-creator/invoice-pdf-merge将多张发票 PDF 拼版到同一张 A4 纸上,节省打印纸张,同时保持 PDF 文字可选中特性。
show_pdf_page(),不转图片/usr/bin/python3 -m pip install PyMuPDF --user
注意:必须使用系统 Python 安装,WorkBuddy 管理的 Python 环境可能不同。
核心设计原则:一张发票对应一个行程,按文件名中的共同前缀智能配对。
将脚本放在待处理文件夹同级目录,然后运行:
/usr/bin/python3 merge_invoices.py <输入文件夹> <输出文件夹>
脚本会自动:
【打车服务-2024年6月-市区到机场】)/usr/bin/python3 merge_invoices.py invoice1.pdf invoice2.pdf output.pdf
核心脚本:scripts/merge_invoices.py
| 函数 | 用途 |
|---|---|
merge_invoice_itinerary() | 发票+行程单上下布局合并,自动删空白尾页 |
merge_two_pdfs() | 两个PDF简单2合1拼版(上下或左右) |
place_single_invoice() | 落单发票放到上半张A4 |
get_content_bottom() | 检测页面实际内容底部坐标 |
is_trivial_page() | 判断页面是否仅有页码等无意义内容 |
auto_merge_folder() | 批量扫描文件夹,按【】前缀智能分组配对 |
_extract_group_key() | 从文件名提取分组标识(【】括号或去后缀) |
注意:v1.1.0 起移除了内置 Excel 生成功能(
extract_invoice_info()、generate_excel()和--excel参数)。数据提取和 Excel 生成由invoice-from-email技能负责。
page.get_text("dict")["blocks"] 获取 bbox,而非依赖页面尺寸"页码:1/1"、"页码: 1 / 1" 等带空格格式)则删除auto_merge_folder() 自动将落单发票拼版合并(2 张/页 A4),大幅节省纸张merge_invoices.py 内置的 Excel 生成功能(extract_invoice_info()、generate_excel() 和 --excel 参数)invoice-from-email 技能负责merge_invoices.py 第545行命令行参数名错误 — generate_excel 改为 gen_excel,修复 --generate-excel 报错 unrecognized argumentsauto_merge_folder 时传入 --generate-excel 参数会触发此 bugQ:行程单内容太多,合并后变成多页? A:这是预期行为。行程单按原始尺寸铺排,超出部分自动续页。如果不需要多页,可以修改脚本改用左右布局。
Q:合并后的PDF文字不可选?
A:检查是否安装了正确版本的 PyMuPDF。必须使用 show_pdf_page() 方法,不能将 PDF 转为图片再合并。
Q:落单发票太大/太小? A:落单发票会使用与合并时相同的缩放逻辑,放到上半张A4的中心位置,大小一致。
{分组标识前30字}_合并.pdf(如 打车服务-2024年6月_合并.pdf)旧版(已废弃)用关键词 "发票" in f / "行程" in f 匹配,但发票文件名常含「1个行程」等文字导致误匹配。
新版采用两步法:
.电子发票.pdf / .电子行程单.pdf)判断类型