WeasyPrint 实战指南:一条命令把 HTML 变成排版精准的 PDF

发布时间:2026/11/6 1:42:24
WeasyPrint 实战指南:一条命令把 HTML 变成排版精准的 PDF 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),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询