网友作品 #000006 · 提交于 2026/08/04
全能文档处理工具:Excel/PDF 合并转换打印


1 / 2
作品简介
「全能文档处理工具」是基于 Python Tkinter 的桌面 GUI 应用,主界面以页签组织八个功能模块:Excel 合并、Excel 拆分、PDF 合并、PDF 拆分、PDF 提取、Excel 转 PDF、图片转 PDF、批量打印。整个项目用 PyInstaller 打包为约 42.5MB 的单文件 exe,无控制台窗口,双击即用、可自由分发。
核心亮点
- Excel 合并:支持 xlsx/xls/csv,提供按工作表合并(同名工作表合并到一起)、按文件合并、全部合并三种方式,可跳过后续文件的表头、添加来源列、删除空行
- Excel 拆分:按工作表拆成多个单表文件,或按固定行数自动分文件,输出目录自定义
- PDF 合并/拆分/提取:支持“1-3,5,7-9”式页码范围语法,可逐页拆分或提取指定页面
- 格式转 PDF:Excel 转 PDF 保留表格样式、A4 纵向横向可选;png/jpg/bmp/gif/tiff 等图片合并转 PDF 并自动适配页面
- 批量打印:支持 PDF、图片、Excel,可设置打印机、份数(1-99)、彩色/黑白、页面大小、方向与页码范围,多级打印引擎自动兜底
- 预览弹窗:图片与 PDF 可翻页、缩放预览,预览中可直接调起打印
- 过程可控:实时日志显示、进度条跟踪,另附测试打印功能
技术与工具
- GUI 框架:Python 内置 Tkinter/ttk
- 处理库:PyMuPDF(PDF)、Pillow(图像)、ReportLab(PDF 生成)、openpyxl/xlrd(Excel)
- 打印方案:PDF 走 SumatraPDF 静默打印与 .NET PrintDocument,图片走 PowerShell .NET 打印,多引擎按优先级兜底
- 打包:PyInstaller 6.21.0 单文件模式,build.bat 一键构建
开发过程
开发中作者记录并逐一修复了一批典型问题:PDF 拆分缺页改用 doc.select 方式;合并报 document closed 调整文档打开/关闭时序;打印页面缩小改为 96 DPI 渲染;打印空白页、无输出等打印机驱动兼容问题替换为 PowerShell .NET PrintDocument 方案;启动闪黑框则隐藏 PowerShell 窗口解决。最终以 build.bat 自动调用 PyInstaller 完成打包交付。
适用场景
- 行政、财务等批量处理文档的岗位:文件合并、拆分、格式转换、批量打印一站式完成
- 中小团队:以自研工具替代付费办公会员功能,并可按自身需求继续定制
原始提交内容(点开查看,可复制全文去问 AI)
全能文档处理工具 - 开发成果汇总
项目概述
一个基于 Python Tkinter 的桌面 GUI 应用,集成了 Excel 合并拆分、PDF 处理、格式转换、批量打印 等功能,打包为单文件 .exe 可分发交付。
技术栈
组件 技术/库 版本 GUI 框架 Tkinter / ttk Python 内置 PDF 处理 PyMuPDF (fitz) 1.28.0 图像处理 Pillow 12.3.0 PDF 生成 ReportLab 5.0.0 Excel 处理 openpyxl / xlrd 3.1.5 / 2.0.2 打包工具 PyInstaller 6.21.0 运行环境 Python 3.14.6 操作系统 Windows 11 26200
项目结构
功能清单
1. Excel 合并
- 支持 .xlsx / .xls / .csv 格式
- 选择多个文件,合并为单一 Excel 工作簿
- 保持原始格式和样式
- 支持指定输出路径
2. Excel 拆分
- 按工作表拆分:一个多工作表文件拆分为多个单工作表文件
- 按行数拆分:每个文件固定行数,自动分文件
- 自定义输出目录
3. PDF 合并
- 选择多个 PDF 文件,合并为一个 PDF
- 保持原始页面顺序和内容
4. PDF 拆分
- 按页码范围拆分(如 1-3,5,7-9 )
- 每页拆分为单独 PDF 文件
- 支持自定义输出目录
5. PDF 提取
- 提取指定页面范围(如 1-3,5,7-9 )
- 输出为新的 PDF 文件
6. Excel 转 PDF
- 支持 .xlsx / .xls / .csv 格式
- 保留表格样式和布局
- 支持 A4 纵向/横向输出
7. 图片转 PDF
- 支持 .png / .jpg / .jpeg / .bmp / .gif / .tiff
- 多图片合并为一个 PDF
- 自动适配页面大小
8. 批量打印
- 支持 PDF、图片(PNG/JPG/BMP/GIF/TIFF)、Excel 文件
- 打印设置 :
- 打印机选择(支持刷新打印机列表)
- 打印份数(1-99)
- 颜色模式(彩色/黑白)
- 页面大小(A4/A3/A5/Letter/Legal/B4/B5)
- 方向(纵向/横向)
- 页码范围(仅 PDF,如 1-5,7,9 )
- 打印引擎 (按优先级):
- PDF:SumatraPDF 静默打印 转图片 + .NET PrintDocument
- 图片:PowerShell .NET PrintDocument mspaint /pt os.startfile
- Excel:系统默认程序打印
- 实时日志显示
- 进度条跟踪
- 测试打印功能
9. 预览弹窗
- 支持图片和 PDF 预览
- 上一页/下一页切换
- 支持缩放显示
- 打印按钮(直接调用打印引擎)
关键修复记录
问题 原因 修复方案 PDF 拆分只出 2/6 页 insert_pdf() 兼容性问题 改用 doc.select(page_list) 方式 合并后提示 document closed 未正确处理文档生命周期 调整 doc 打开/关闭时序 预览渲染失败 PIL. 前缀未定义 将 PIL.Image 改为 Image 运行时 setup_styles 错误 未显式导入 tkinter.font 添加 import tkinter.font as tkfont MRP 系统.exe 启动卡死 customtkinter 主题文件未打包 改用目录模式打包 打印页面缩小 300 DPI 渲染不匹配 Windows 打印 改为 96 DPI 渲染 启动闪黑框 PowerShell 未隐藏窗口 添加 -WindowStyle Hidden 和 CREATE_NO_WINDOW 打印成功但无输出 mspaint /pt 打印数据打印机驱动无法处理 改用 .NET PrintDocument 通过 Windows 标准打印 API 发送 打印空白页 mspaint /pt 在某些打印机驱动下输出空白 替换为 PowerShell .NET PrintDocument 方式
打包与交付
打包方式
build.bat # 双击运行,自动调用 PyInstaller 6.21.0
打包配置(build.spec)
- 模式 :单文件 exe( console=False ,无控制台窗口)
- hidden imports : tkinter 、 openpyxl 、 PIL 、 fitz 、 reportlab 、 xlrd 等
- 产物 : dist\全能文档处理工具.exe (42.5 MB)