# PDF 生成环境说明文档 ## 📋 概述 本项目使用 Python 脚本将 JSON 数据转换为 PDF 报告。主要依赖 WeasyPrint 库进行 HTML 到 PDF 的转换。 ## 🔧 环境要求 ### Python 版本 - **Python 3.8+** (推荐 Python 3.9 或更高版本) - 支持 Windows、Linux、macOS ### 系统依赖 #### Windows - 需要安装 **GTK+ 运行时库**(WeasyPrint 的必需依赖) - 推荐使用 Conda 环境(自动处理依赖) #### Linux - 需要安装系统级字体库和 GTK+ 相关库 - Ubuntu/Debian: `sudo apt-get install python3-dev python3-pip python3-cffi libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev shared-mime-info` - CentOS/RHEL: `sudo yum install python3-devel python3-pip cairo pango gdk-pixbuf2 libffi` #### macOS - 需要安装 GTK+ 和相关库 - 推荐使用 Homebrew: `brew install cairo pango gdk-pixbuf libffi` ## 📦 Python 依赖包 项目依赖以下 Python 包(见 `requirements.txt`): | 包名 | 版本要求 | 说明 | |------|---------|------| | jinja2 | >=3.1.2 | HTML 模板引擎,用于渲染报告模板 | | weasyprint | >=60.0 | PDF 生成库,将 HTML 转换为 PDF | ## 🚀 安装步骤 ### 方法一:使用 Conda(推荐,Windows 用户首选) Conda 会自动处理所有系统依赖,包括 GTK+ 运行时库。 ```bash # 1. 创建 Conda 环境(可选) conda create -n pdf-generator python=3.9 conda activate pdf-generator # 2. 安装 WeasyPrint(自动安装所有依赖) conda install -c conda-forge weasyprint # 3. 安装其他依赖 pip install jinja2 ``` ### 方法二:使用 pip + 手动安装系统依赖 #### Windows 1. **安装 GTK+ 运行时库** - 下载地址:https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases - 下载并安装最新的 `gtk3-runtime-*.exe`(64位版本) - 安装到默认路径:`C:\Program Files\GTK3-Runtime Win64` - 确保安装程序自动添加到 PATH,或手动添加:`C:\Program Files\GTK3-Runtime Win64\bin` 2. **安装 Python 依赖** ```bash pip install -r requirements.txt ``` 3. **重启终端**(重要!让 PATH 生效) #### Linux ```bash # 1. 安装系统依赖(Ubuntu/Debian 示例) sudo apt-get update sudo apt-get install python3-dev python3-pip python3-cffi \ libcairo2 libpango-1.0-0 libpangocairo-1.0-0 \ libgdk-pixbuf2.0-0 libffi-dev shared-mime-info # 2. 安装 Python 依赖 pip install -r requirements.txt ``` #### macOS ```bash # 1. 安装系统依赖(使用 Homebrew) brew install cairo pango gdk-pixbuf libffi # 2. 安装 Python 依赖 pip install -r requirements.txt ``` ### 方法三:使用虚拟环境(推荐用于生产环境) ```bash # 1. 创建虚拟环境 python -m venv venv # 2. 激活虚拟环境 # Windows: venv\Scripts\activate # Linux/macOS: source venv/bin/activate # 3. 安装依赖 pip install -r requirements.txt ``` ## ✅ 验证安装 运行以下命令验证环境是否正确配置: ```bash python -c "from weasyprint import HTML; print('WeasyPrint 安装成功!')" ``` 如果出现错误,请参考下面的"常见问题"部分。 ## 📝 使用方法 ### 基本用法 ```bash python generate_pdf.py <数据文件> [输出文件] ``` ### 示例 ```bash # 使用示例数据生成 PDF python generate_pdf.py public/example.json output.pdf # 指定输出文件名(默认为 report.pdf) python generate_pdf.py public/example.json my_report.pdf ``` ### 数据文件格式 - 支持 JSON 格式文件 - 文件应包含 `DWBG8B4D` 或 `CDWBG8B4D` 的谛听报告数据 - 可选包含 `FLXG7E8F` 或 `FLXG0V4B` 的司法涉诉数据 ## 🐛 常见问题 ### 问题 1: `OSError: cannot load library 'libgobject-2.0-0'` **原因**:Windows 系统缺少 GTK+ 运行时库。 **解决方案**: 1. **推荐**:使用 Conda 安装 WeasyPrint ```bash conda install -c conda-forge weasyprint ``` 2. **或**:手动安装 GTK+ 运行时库 - 下载:https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases - 安装后重启终端 ### 问题 2: `ImportError: No module named 'weasyprint'` **原因**:WeasyPrint 未安装或不在当前 Python 环境中。 **解决方案**: ```bash pip install weasyprint # 或使用 Conda conda install -c conda-forge weasyprint ``` ### 问题 3: `ImportError: No module named 'jinja2'` **原因**:Jinja2 模板引擎未安装。 **解决方案**: ```bash pip install jinja2 ``` ### 问题 4: 生成的 PDF 中文显示为方块 **原因**:系统缺少中文字体。 **解决方案**: - **Windows**:系统自带中文字体,通常无需额外配置 - **Linux**:安装中文字体 ```bash sudo apt-get install fonts-wqy-microhei fonts-wqy-zenhei ``` - **macOS**:系统自带中文字体 ### 问题 5: Conda 安装 WeasyPrint 时卡住或报错 **原因**:Conda 依赖解析时间过长或网络问题。 **解决方案**: 1. 更新 Conda: ```bash conda update conda ``` 2. 使用国内镜像源(如果在中国): ```bash conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free conda config --add channels conda-forge ``` 3. 或使用 pip + GTK+ 运行时库的方式 ### 问题 6: 权限错误(Linux/macOS) **原因**:没有权限安装系统依赖。 **解决方案**: ```bash # 使用 sudo 安装系统依赖 sudo apt-get install ... # Ubuntu/Debian sudo yum install ... # CentOS/RHEL ``` ## 🔍 环境检查清单 在开始使用前,请确认: - [ ] Python 版本 >= 3.8 - [ ] WeasyPrint 已正确安装 - [ ] Jinja2 已正确安装 - [ ] (Windows)GTK+ 运行时库已安装并添加到 PATH - [ ] (Linux/macOS)系统依赖已安装 - [ ] 可以成功导入 WeasyPrint:`python -c "from weasyprint import HTML"` ## 📚 相关资源 - **WeasyPrint 官方文档**:https://weasyprint.org/ - **Jinja2 官方文档**:https://jinja.palletsprojects.com/ - **GTK+ Windows 运行时**:https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases - **Conda 文档**:https://docs.conda.io/ ## 💡 最佳实践 1. **使用虚拟环境**:避免污染系统 Python 环境 2. **Windows 用户优先使用 Conda**:自动处理所有依赖,最简单 3. **定期更新依赖**:`pip install --upgrade weasyprint jinja2` 4. **测试环境**:在生成大量 PDF 前,先用示例数据测试 ## 🔄 更新依赖 ```bash # 更新所有依赖 pip install --upgrade -r requirements.txt # 或单独更新 pip install --upgrade weasyprint jinja2 ``` ## 📞 技术支持 如果遇到问题: 1. 检查 Python 版本:`python --version` 2. 检查已安装的包:`pip list | grep -E "weasyprint|jinja2"` 3. 查看错误信息:运行 `python generate_pdf.py` 查看详细错误 4. 验证环境:运行 `python -c "from weasyprint import HTML; print('OK')"` --- **最后更新**:2025-01-20