python实现的html批量转pdf工具

167 阅读4分钟

HTML 批量转 PDF 工具

这是一个使用 Python 和 Tkinter 构建的图形界面工具,用于将指定文件夹内的所有 HTML 文件 (.html, .htm) 批量转换为 PDF 文件。转换后的 PDF 文件将保存在与原始 HTML 文件相同的目录中。

功能介绍

  • 图形用户界面 (GUI): 提供简单的界面,易于使用。
  • 目录选择: 用户可以通过浏览按钮选择包含 HTML 文件的源目录。
  • 批量转换: 自动查找选定目录下的所有 HTML 文件并进行转换。
  • PDF 输出: 生成的 PDF 文件与对应的 HTML 文件同名(扩展名不同),保存在同一目录下。
  • 状态日志: 在界面中显示转换过程的实时日志,包括正在转换的文件、成功或失败状态以及最终摘要。
  • 后台处理: 转换过程在后台线程中运行,避免长时间转换导致界面冻结。
  • 跨平台: 基于 Python 和 Tkinter,理论上可在 Windows, macOS, Linux 上运行(需要安装相应依赖)。
  • 打包支持: 可以使用 PyInstaller 打包成单个可执行文件,方便分发和使用,并捆绑 wkhtmltopdf 依赖。

创作过程

  1. 需求分析: 需要一个简单的工具来自动化将大量 HTML 文件转换为 PDF 的任务,并提供图形界面方便非技术用户使用。
  2. 技术选型:
    • GUI: 选择 Python 内置的 Tkinter 库,因为它无需额外安装,简单易用。
    • HTML->PDF 转换: 使用 pdfkit 库,它是 wkhtmltopdf 工具的流行 Python 包装器。wkhtmltopdf 使用 WebKit 引擎渲染 HTML,转换效果较好。
    • 文件/目录操作: 使用 Python 内置的 os 模块。
    • 打包: 使用 PyInstaller 将 Python 脚本打包成独立的可执行文件。
    • 并发处理: 使用 threading 模块将耗时的转换任务放到后台线程,保持 GUI 响应。
  3. 界面设计: 设计了一个简洁的界面,包含目录选择、开始按钮和日志显示区域。
  4. 核心逻辑实现:
    • 编写函数处理目录选择。
    • 编写核心转换函数,遍历目录,识别 HTML 文件,调用 pdfkit.from_file() 进行转换。
    • 添加错误处理机制,捕获转换过程中的异常。
    • 实现日志记录功能,将信息输出到 GUI 的文本区域。
    • 集成 threading,将转换逻辑放入后台线程。
    • 添加线程安全的 GUI 更新机制 (root.after)。
  5. wkhtmltopdf 依赖处理:
    • pdfkit 依赖于外部工具 wkhtmltopdf。脚本需要能够找到这个工具。
    • 代码中加入了逻辑来检测 wkhtmltopdf:优先查找与 PyInstaller 打包文件捆绑的版本,其次查找系统 PATH,再尝试 Windows 默认安装路径。
    • 提供了使用 PyInstaller --add-binary 参数捆绑 wkhtmltopdf 的说明,这是分发给普通用户的最佳方式。
  6. 打包与测试:
    • 编写 PyInstaller 打包命令。
    • 在不同环境下测试脚本运行和打包后的可执行文件。
    • 测试 HTML 文件包含本地 CSS 和图片的情况(通过 enable-local-file-access 选项支持)。
  7. 文档编写: 创建此 README.md 文件,说明工具的功能、使用方法和开发过程。

使用方法

作为 Python 脚本运行

  1. 确保已安装 Python 3
  2. 安装依赖库:
    pip install pdfkit
    
  3. 安装 wkhtmltopdf:
    • 访问 wkhtmltopdf 官网下载页面
    • 下载适合你操作系统的版本并安装。
    • 重要: 建议在安装时将其添加到系统 PATH 环境变量中,否则脚本可能找不到它。
  4. 运行脚本:
    python html_to_pdf_converter.py
    
  5. 在打开的窗口中,点击"浏览..."选择包含 HTML 文件的文件夹。
  6. 点击"开始转换"按钮。
  7. 观察日志区域输出的转换进度和结果。PDF 文件会生成在源目录中。

使用打包后的 EXE 文件 (推荐)

  1. 获取 EXE 文件: 从发布处下载 html_to_pdf_converter.exe (或类似名称的文件)。通常 wkhtmltopdf 已被捆绑在内,无需单独安装。
  2. 双击运行: 直接双击 .exe 文件启动程序。
  3. 使用:
    • 点击"浏览..."选择包含 HTML 文件的文件夹。
    • 点击"开始转换"按钮。
    • 转换后的 PDF 文件将出现在你选择的文件夹内。

注意事项

  • 转换效果依赖于 wkhtmltopdf 对 HTML/CSS 的渲染能力。复杂的 JavaScript 或特定 CSS 可能无法完美转换。
  • 如果 HTML 文件引用了本地资源(如 CSS 文件、图片),请确保这些资源文件路径相对于 HTML 文件是正确的。enable-local-file-access 选项已启用以支持此功能。
  • 如果遇到 wkhtmltopdf 相关的错误(例如 "No wkhtmltopdf found"),请确认 wkhtmltopdf 已正确安装并位于系统 PATH 中,或者确认打包的 EXE 文件已正确捆绑了 wkhtmltopdf
  • 转换大量或大型文件可能需要较长时间。

如何打包 (开发者)

  1. 安装 PyInstaller: pip install pyinstaller
  2. 找到你的 wkhtmltopdf 可执行文件路径。
  3. 在包含 html_to_pdf_converter.py 的目录下运行(以 Windows 为例,替换路径):
    pyinstaller --onefile --windowed --add-binary "C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe;." html_to_pdf_converter.py
    
  4. 生成的 EXE 文件位于 dist 目录下。

1.png