这是一个桌面 GUI 工具,用于把 PDF 转成 Excel,并尽量保留原始版式(行列相对位置、块状结构、基础边框感)。
核心不是“按行读文本”,而是“按坐标重建版面”:
- 从 PDF 读取每个文本块/单词的坐标(x、y、宽、高)
- 对 x 坐标做聚类,得到“列轨道”;对 y 坐标做聚类,得到“行轨道”
- 把文本块映射到最接近的 Excel 单元格
- 根据坐标跨度尝试合并单元格
- 按页面高度映射 Excel 行高、按页面宽度映射列宽
- 读取 PDF 的线条信息,映射为 Excel 边框(基础还原)
注意:PDF 本质是“绘图结果”,不是结构化表格。任何“100% 完全一致”都很难保证。这个方案是业界最常用、效果最稳定的可控方案。
- 单个 PDF 转换为 Excel
- 批量处理文件夹下所有 PDF
- GUI 实时日志 + 进度条
- 输出目录可自定义
- 支持每页转换到独立工作表
- 支持 OCR 兜底(可选插件,处理扫描版/图片型 PDF)
- 支持可视化调参(X/Y 聚类容差)
- 支持严格保真模式(页面外观优先,几乎与 PDF 完全一致)
- Windows / macOS / Linux
- Python 3.10+
python -m venv .venvWindows 激活:
.venv\Scripts\activatepip install -r requirements.txtpython app.py- 输入参数:
pdf_path: PDF 文件路径output_path: 输出 Excel 文件路径
- 返回:
- 成功返回
True与消息文本 - 失败返回
False与错误原因
- 成功返回
- 输入参数:
input_dir: PDF 所在目录output_dir: Excel 输出目录
- 返回:
- 总数、成功数、失败数、失败详情
PDFtoEXCEL/
├─ app.py
├─ requirements.txt
├─ README.md
└─ pdf_to_excel/
├─ __init__.py
└─ converter.py
- 扫描版 PDF 的 OCR 依赖目前为可选插件,在 Python 3.14 下暂不可直接安装
- 超复杂图文混排可能出现位置偏移
- 跨页复杂表格无法做到绝对一致
- 当前 GUI 已强制开启严格保真模式(不可关闭)。
- 每页 PDF 会以高分辨率渲染图像写入 Excel。
- 该模式目标是视觉结果与原 PDF 尽量一致,适合“格式不能变”的场景。
- 该模式输出内容主要用于展示/打印,不适合做单元格级数据编辑。
当前主功能在 Python 3.14 下可正常使用。
若你希望启用 OCR 兜底,请使用 Python 3.12/3.11 创建环境后额外安装:
pip install rapidocr-onnxruntime numpy- 增加“模板学习模式”(对特定供应商单据做规则增强)
- 增加导出质量评分与可视化校验页面
- 增加一键打包
.exe(PyInstaller)和自动更新机制
目标:生成尽量小、可直接双击运行的单文件 exe。
在项目根目录执行:
powershell -ExecutionPolicy Bypass -File .\build_minimal.ps1打包完成后产物位置:
dist/PDFtoEXCEL_min.exe
.\.venv\Scripts\python -m PyInstaller --clean --noconfirm --onefile --windowed .\app.py --name PDFtoEXCEL_min --collect-all customtkinter --exclude-module matplotlib --exclude-module scipy --exclude-module IPython --exclude-module notebook --exclude-module jupyter --exclude-module pytest --exclude-module pandas--onefile:单文件可执行程序,便于发给别人使用--exclude-module ...:排除本项目没用到的大包,减小体积- 首次启动会比源码运行稍慢(属正常现象)
- 如果提示缺少依赖,先执行:
pip install -r requirements.txt pyinstaller - 若被杀毒软件拦截,请将
dist目录加入信任后再试