发票排版与打印(InvoiceLayoutAndPrinting)一个用于将多张 PDF 发票按“上下双页”方式自动合并、预览与打印的桌面工具。基于 Python、PyQt6 与 pypdf,支持一键打包为单文件可执行程序(Nuitka)。 功能概述导入单个 PDF 或目录中的所有 PDF 文件(拖拽或文件选择) 文件列表仅显示文件名,支持拖拽排序,右侧系统风格“关闭”图标一键移除 排版方式:双页竖向合并(两页拼成一页,上下排列) 预览窗口支持多页滚动查看,自动适配宽度 打印:支持系统打印对话框,或调用 Edge 打印(如可用)
快速开始 环境准备项目使用 uv 管理依赖与运行;若未安装 uv,可使用 Python 原生虚拟环境与 pip。使用 uv:
使用虚拟环境与 pip:
创建虚拟环境:python -m venv .venv 安装依赖:.venv\Scripts\python -m pip install -U pip nuitka pyqt6 pypdf 运行 GUI:.venv\Scripts\python main.py --gui
项目脚本 使用说明添加发票:拖拽 PDF 到左侧卡片或点击“+ 添加发票”选择文件/目录 文件列表:
仅显示文件名(悬停显示完整路径) 右侧“关闭”图标可移除条目 支持拖拽排序,列表当前顺序决定合并后的页序
排版:点击“🧩 排版”生成合并后的 PDF(默认输出到源目录,或指定输出目录) 打印:勾选“排版后打印”,或在右侧点击“🖨 打印” 预览:排版完成后自动加载合并文件,多页滚动查看
技术细节合成逻辑在 layoutInvoice.py:
two_up_vertical_pages(pages) 按两页一组竖向合成;宽度取两页最大值,高度为两页高度和 使用每页的 cropbox 对齐坐标系,保证不同来源 PDF 的布局一致 对 PDF 注释(/Annots,如电子印章)进行同步平移与复制,确保印章位置在合成后仍处于票头处
GUI 在 gui.py:
打印在 printInvoice.py:
常见问题 目录结构 InvoiceLayoutAndPrinting/├─ gui.py # 图形界面├─ main.py # CLI 与 GUI 入口├─ layoutInvoice.py # 合成与注释处理逻辑├─ printInvoice.py # 打印实现├─ readInvoice.py # 读取与收集 PDF├─ Makefile # 构建与打包├─ pyproject.toml # 依赖与项目配置├─ uv.lock # uv 锁文件├─ icon.ico # 应用图标└─ README.md # 项目说明
打包说明(Nuitka)
软件图片 见附件 下载地址:https://github.com/Simon7612/InvoiceLayoutAndPrinting/releases/tag/0.0.1 |