
WeasyPrint 实战指南一条命令把 HTML 变成排版精准的 PDF【免费下载链接】WeasyPrintThe awesome document factory项目地址: https://gitcode.com/gh_mirrors/we/WeasyPrint如果你需要把 HTML 网页、模板化的报告或存档页面输出成 PDFWeasyPrint 是一个值得优先考虑的方案。它是一个纯 Python 的 HTML 转 PDF 转换库不依赖浏览器内核而是通过 Pango 完成文本渲染因此输出结果在不同机器上保持一致。这篇指南面向刚接触它的开发和运营同学从安装、命令行动手讲到中文字体、自定义字体和批量处理中的几个高频坑。安装 WeasyPrint 之前要注意什么WeasyPrint 本身用 pip 装但它依赖系统级的 Pango 文本渲染库这一步经常被忽略导致装完跑不起来。LinuxUbuntu/Debian可以直接走发行版包管理器sudo apt install weasyprintWindows / macOS在 Python 环境里执行pip install weasyprint即可macOS 也可以用 Homebrewbrew install weasyprint。建议装在虚拟环境里避免和系统 Python 的依赖打架python3 -m venv venv source venv/bin/activate pip install weasyprint装完后跑一下weasyprint --info它会打印系统、Pango 和 WeasyPrint 各自的版本能直接确认依赖链是否完整。以后排查渲染问题这也是第一个该看的命令。一条命令完成 HTML 转 PDF命令行是最快的上手方式语法就是输入在前输出在后weasyprint input.html output.pdf输入既可以是本地文件也可以是 URL适合直接做网页存档。如果想在转换时叠加一份自己的样式表可以加-s参数指向 CSS 文件。日常使用中还有几个参数值得记住-m指定媒体类型默认 print、-e强制指定输入编码老文件里遇到乱码时很有用、-D限制嵌入图片的分辨率以控制 PDF 体积。完整参数清单可以用--help查看官方文档里的 manpage.rst 也有逐项说明。用 Python API 获得更细的控制当转换逻辑要嵌进业务代码时用 Python API 更合适。核心入口是HTML类两个最常用的方法from weasyprint import HTML # 从 URL 或本地文件生成 HTML(https://example.com).write_pdf(web_page.pdf) # 从 HTML 字符串生成 HTML(stringh1我的文档/h1p正文内容/p).write_pdf(report.pdf)write_pdf适合一步到位直接出文件如果需要先拿到文档对象再处理就调render()它会返回一个Document上面有pages列表和write_pdf()等方法。API 细节可以看 api_reference.rst。中文和自定义字体怎么配中文字体不生效是最常见的问题原因基本就两类系统里没装对应字体或者没在 CSS 里正确声明字体族。解决思路先确认系统已安装支持中文的字体CSS 的font-family里写明该字体族名如果要用私有字体文件用font-face规则显式声明并通过FontConfiguration对象让 WeasyPrint 感知它from weasyprint import CSS, HTML from weasyprint.text.fonts import FontConfiguration font_config FontConfiguration() css CSS(string font-face { font-family: MyFont; src: url(fonts/myfont.ttf); } , font_configfont_config)注意FontConfiguration需要传给所有作用于同一文档的CSS对象字体声明才会生效。字体相关的渲染逻辑集中在 weasyprint/text/fonts.py想理解加载机制可以读一下。提取页面子集render()返回的Document支持按页切片。比如只导出第 2 到第 3 页Python 切片从 0 开始计数document HTML(input.html).render() document.copy(document.pages[1:3]).write_pdf(subset.pdf)这个能力在同一份长报告按章节拆给不同部门的场景里很好用。批量转换的性能建议如果你的任务是月末批量导出几十上百份报告别为每个文件起一次新进程。更稳的做法是让 Python 进程长期运行循环调用write_pdf复用同一个FontConfiguration实例避免每份文档都重新解析一遍字体大批量时留意图片体积必要时用-D命令行限制嵌入分辨率。下一步建议想深入 CSS 支持范围读一遍 docs/ 下的 first_steps 和 going_further想理解布局是怎么算的看 weasyprint/layout/ 里的模块上手时先跑通weasyprint --info再跑一条最小转换命令字体和分页问题按本文顺序排查基本能覆盖 90% 的初始化场景。【免费下载链接】WeasyPrintThe awesome document factory项目地址: https://gitcode.com/gh_mirrors/we/WeasyPrint创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考