WeasyPrint:把 HTML 变成 PDF 的文档工厂
WeasyPrint 在 GitHub 上已经拿到 9,251 Star 了。
Kozea 开源了这个工具,专门干一件事——用 HTML 和 CSS 生成 PDF 文档。不需要浏览器内核,不用装 Chrome 或 WebKit,纯 Python 就能把网页排版变成可打印的 PDF。

1、 这玩意儿是干嘛的
就一件事:把 HTML 和 CSS 渲染成 PDF。
统计报表、发票、车票、合同、电子书,凡是能用 HTML 画出来的东西,WeasyPrint 都能转成排版精准的 PDF。它遵循 CSS 打印标准,分页、页眉页脚、页码、分栏这些印刷排版需求都原生支持。跟浏览器打印相比,它的输出更可控:同样的 HTML,每次生成的 PDF 完全一致,不受浏览器版本和系统字体差异的影响。
2、 为什么要用它
Python 生态里生成 PDF 的方案不少,但大多数要么太底层,要么太笨重。
ReportLab 之类的库需要手写坐标画元素,画个表格都得算半天位置。挂无头浏览器又太重,Chrome 进程一启动就是几百兆内存,服务端批量跑的时候机器撑不住。
WeasyPrint 走的是中间路线。用自己的 CSS 排版引擎做渲染,不依赖任何浏览器内核。内存占用低,部署简单,一个 pip install 就能跑。对于服务端批量生成 PDF 的场景来说,这个优势很实在——不需要在服务器上装 Chrome,也不用维护一堆浏览器进程。
CSS 排版引擎是纯 Python 写的,专为分页场景设计。想改源码或者定制排版逻辑,门槛不高。

3、 技术亮点
WeasyPrint 不依赖 WebKit、Gecko 或任何完整的浏览器渲染引擎。它的 CSS 布局引擎完全用 Python 实现,专门针对分页媒体优化。这意味着你可以精确控制每一页的输出:纸张尺寸、页边距、分页位置、重复的页眉页脚,全都可以通过 CSS 控制。
支持的 CSS 特性覆盖了印刷场景的核心需求:CSS Paged Media、CSS Flexbox、CSS Grid、CSS Fonts、CSS Colors。它不追求 100% 还原浏览器效果,专注于"把网页变成可打印文档"这件事。
BSD 协议开源,Python 3.10 以上就能用。项目由 Kozea 创建和维护,CourtBouillon 提供专业支持。
4、 安装使用
pip install weasyprint
最简单的用法,一行代码:
from weasyprint import HTML
HTML('https://weasyprint.org').write_pdf('page.pdf')
也支持从字符串或文件渲染:
HTML(string='<h1>Hello</h1>').write_pdf('hello.pdf')
HTML(filename='report.html').write_pdf('report.pdf')
命令行也能直接用:
weasyprint input.html output.pdf
5、 适合哪些人用
- 需要服务端批量生成发票、报表、电子合同的开发者
- 用 Django、Flask 或 FastAPI 做 Web 应用,需要"页面导出 PDF"功能的后端工程师
- 在做电子书或文档生成工具,想把 HTML 模板渲染成精美排版 PDF 的人
- 不想在服务器上跑无头浏览器但需要高质量 PDF 输出的场景
书或文档生成工具,想把 HTML 模板渲染成精美排版 PDF 的人
- 不想在服务器上跑无头浏览器但需要高质量 PDF 输出的场景

3087

被折叠的 条评论
为什么被折叠?



