WeasyPrint:把 HTML 变成 PDF 的文档工厂

文章目录

  • [WeasyPrint:把 HTML 变成 PDF 的文档工厂](#WeasyPrint:把 HTML 变成 PDF 的文档工厂)
    • [1、 这玩意儿是干嘛的](#1、 这玩意儿是干嘛的)
    • [2、 为什么要用它](#2、 为什么要用它)
    • [3、 技术亮点](#3、 技术亮点)
    • [4、 安装使用](#4、 安装使用)
    • [5、 适合哪些人用](#5、 适合哪些人用)

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、 安装使用

bash 复制代码
pip install weasyprint

最简单的用法,一行代码:

python 复制代码
from weasyprint import HTML
HTML('https://weasyprint.org').write_pdf('page.pdf')

也支持从字符串或文件渲染:

python 复制代码
HTML(string='<h1>Hello</h1>').write_pdf('hello.pdf')
HTML(filename='report.html').write_pdf('report.pdf')

命令行也能直接用:

bash 复制代码
weasyprint input.html output.pdf

5、 适合哪些人用

  • 需要服务端批量生成发票、报表、电子合同的开发者
  • 用 Django、Flask 或 FastAPI 做 Web 应用,需要"页面导出 PDF"功能的后端工程师
  • 在做电子书或文档生成工具,想把 HTML 模板渲染成精美排版 PDF 的人
  • 不想在服务器上跑无头浏览器但需要高质量 PDF 输出的场景

书或文档生成工具,想把 HTML 模板渲染成精美排版 PDF 的人

  • 不想在服务器上跑无头浏览器但需要高质量 PDF 输出的场景
相关推荐
子兮曰10 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰10 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
一起聊电气10 小时前
2026工厂智能照明改造怎么做?从能耗痛点看智慧照明的落地路径
其他
前端小万10 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝10 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋11 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
打螺丝的小李11 小时前
集团型多基地 QMS 选型:跨工厂质量统一管控谁更强
其他
芯片封装工程师12 小时前
台式选择性波峰焊接机,精密焊接新选择
其他
卡布鲁12 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王952713 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端