HTML 批量转 PDF 工具
这是一个使用 Python 和 Tkinter 构建的图形界面工具,用于将指定文件夹内的所有 HTML 文件 (.html, .htm) 批量转换为 PDF 文件。转换后的 PDF 文件将保存在与原始 HTML 文件相同的目录中。
功能介绍
- 图形用户界面 (GUI): 提供简单的界面,易于使用。
- 目录选择: 用户可以通过浏览按钮选择包含 HTML 文件的源目录。
- 批量转换: 自动查找选定目录下的所有 HTML 文件并进行转换。
- PDF 输出: 生成的 PDF 文件与对应的 HTML 文件同名(扩展名不同),保存在同一目录下。
- 状态日志: 在界面中显示转换过程的实时日志,包括正在转换的文件、成功或失败状态以及最终摘要。
- 后台处理: 转换过程在后台线程中运行,避免长时间转换导致界面冻结。
- 跨平台: 基于 Python 和 Tkinter,理论上可在 Windows, macOS, Linux 上运行(需要安装相应依赖)。
- 打包支持: 可以使用 PyInstaller 打包成单个可执行文件,方便分发和使用,并捆绑
wkhtmltopdf依赖。
创作过程
- 需求分析: 需要一个简单的工具来自动化将大量 HTML 文件转换为 PDF 的任务,并提供图形界面方便非技术用户使用。
- 技术选型:
- GUI: 选择 Python 内置的
Tkinter库,因为它无需额外安装,简单易用。 - HTML->PDF 转换: 使用
pdfkit库,它是wkhtmltopdf工具的流行 Python 包装器。wkhtmltopdf使用 WebKit 引擎渲染 HTML,转换效果较好。 - 文件/目录操作: 使用 Python 内置的
os模块。 - 打包: 使用
PyInstaller将 Python 脚本打包成独立的可执行文件。 - 并发处理: 使用
threading模块将耗时的转换任务放到后台线程,保持 GUI 响应。
- GUI: 选择 Python 内置的
- 界面设计: 设计了一个简洁的界面,包含目录选择、开始按钮和日志显示区域。
- 核心逻辑实现:
- 编写函数处理目录选择。
- 编写核心转换函数,遍历目录,识别 HTML 文件,调用
pdfkit.from_file()进行转换。 - 添加错误处理机制,捕获转换过程中的异常。
- 实现日志记录功能,将信息输出到 GUI 的文本区域。
- 集成
threading,将转换逻辑放入后台线程。 - 添加线程安全的 GUI 更新机制 (
root.after)。
wkhtmltopdf依赖处理:pdfkit依赖于外部工具wkhtmltopdf。脚本需要能够找到这个工具。- 代码中加入了逻辑来检测
wkhtmltopdf:优先查找与 PyInstaller 打包文件捆绑的版本,其次查找系统 PATH,再尝试 Windows 默认安装路径。 - 提供了使用 PyInstaller
--add-binary参数捆绑wkhtmltopdf的说明,这是分发给普通用户的最佳方式。
- 打包与测试:
- 编写 PyInstaller 打包命令。
- 在不同环境下测试脚本运行和打包后的可执行文件。
- 测试 HTML 文件包含本地 CSS 和图片的情况(通过
enable-local-file-access选项支持)。
- 文档编写: 创建此
README.md文件,说明工具的功能、使用方法和开发过程。
使用方法
作为 Python 脚本运行
- 确保已安装 Python 3。
- 安装依赖库:
pip install pdfkit - 安装 wkhtmltopdf:
- 访问 wkhtmltopdf 官网下载页面。
- 下载适合你操作系统的版本并安装。
- 重要: 建议在安装时将其添加到系统 PATH 环境变量中,否则脚本可能找不到它。
- 运行脚本:
python html_to_pdf_converter.py - 在打开的窗口中,点击"浏览..."选择包含 HTML 文件的文件夹。
- 点击"开始转换"按钮。
- 观察日志区域输出的转换进度和结果。PDF 文件会生成在源目录中。
使用打包后的 EXE 文件 (推荐)
- 获取 EXE 文件: 从发布处下载
html_to_pdf_converter.exe(或类似名称的文件)。通常wkhtmltopdf已被捆绑在内,无需单独安装。 - 双击运行: 直接双击
.exe文件启动程序。 - 使用:
- 点击"浏览..."选择包含 HTML 文件的文件夹。
- 点击"开始转换"按钮。
- 转换后的 PDF 文件将出现在你选择的文件夹内。
注意事项
- 转换效果依赖于
wkhtmltopdf对 HTML/CSS 的渲染能力。复杂的 JavaScript 或特定 CSS 可能无法完美转换。 - 如果 HTML 文件引用了本地资源(如 CSS 文件、图片),请确保这些资源文件路径相对于 HTML 文件是正确的。
enable-local-file-access选项已启用以支持此功能。 - 如果遇到
wkhtmltopdf相关的错误(例如 "No wkhtmltopdf found"),请确认wkhtmltopdf已正确安装并位于系统 PATH 中,或者确认打包的 EXE 文件已正确捆绑了wkhtmltopdf。 - 转换大量或大型文件可能需要较长时间。
如何打包 (开发者)
- 安装 PyInstaller:
pip install pyinstaller - 找到你的
wkhtmltopdf可执行文件路径。 - 在包含
html_to_pdf_converter.py的目录下运行(以 Windows 为例,替换路径):pyinstaller --onefile --windowed --add-binary "C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe;." html_to_pdf_converter.py - 生成的 EXE 文件位于
dist目录下。