用途:把已存在的 HTML + CSS 内容渲染成 PDF,适合静态报表导出,例如 HTML/Jinja 模板加数据生成样式化报告、Markdown 转 HTML 后打印、邮件内容归档、HTML 仪表盘加截图汇总为可分享 PDF。若源数据是结构化数据(JSON、dataframe)而无 HTML,应改用 pdf-toolkit 的 reportlab 路径;若需编辑现有 PDF,用 pdf-toolkit 的 pypdf 路径;若需 Word 式精确排版,用 docx 技能。
主要能力:基于 WeasyPrint,支持 CSS Paged Media 的关键部分,包括 @page 规则(size、margin、@top-center、@bottom-right 等页眉页脚框)、分页控制(page-break-before、page-break-after、break-inside: avoid)、计数器(counter(page)、counter(pages)),并支持部分 prince- 扩展属性。
使用方式:脚本可接受本地文件路径、file:// URL 或 http(s):// URL,本地路径下 CSS 相对 HTML 位置加载。示例命令:python {baseDir}/scripts/render.py --html report.html --out report.pdf;python {baseDir}/scripts/render.py --html invoice.html --out invoice.pdf --page-size A4。交付规则:若会话提供 write_file、edit_file、apply_patch 或 execute_code,则在活动工作区生成文件,并在可用时调用 publish_artifact;若没有文件写入工具,不要生成或修改文件,也不要粘贴完整 HTML/CSS 源码作为替代,应说明当前会话无法创建文件,并提供按路径发布已有文件、用文字描述内容或在 OpenSquilla Web UI 等可写文件环境继续的选项。
安装提示:WeasyPrint 是纯 Python,但依赖原生库,需单独安装系统包。macOS:brew install pango cairo gdk-pixbuf libffi;Debian/Ubuntu:sudo apt-get install -y libpango-1.0-0 libpangoft2-1.0-0 libharfbuzz0b libfontconfig1;Windows 可用 winget install --id GTK.GTK3,或使用 MSYS2 的 mingw-w64-x86_64-pango 并确保其 bin/ 在 PATH 中。若报 OSError: cannot load library,说明原生库不在搜索路径。
限制:不执行 JavaScript,动态内容需先用无头浏览器预渲染;并非支持全部 CSS,flexbox 与 grid 在分页场景有已知限制,使用前应测试布局;字体可用性依赖操作系统,为保证可复现性可用 @font-face 配合绝对路径或 data URI 嵌入字体;大批量生成(每分钟数百份)建议使用服务级渲染器,WeasyPrint 适合每次几十到几百份 PDF。