基于服务端浏览器技术(Chrome Headless),实现网页截图与 PDF 生成能力
- 支持全 8B01 截图与指定元素截图
- 模拟不同设备(手机、平板、PC),支持自定义分辨率和 UA
应用场景:
- Word 文档插图:通过浏览器渲染图表(Echart、G2)或复杂组件,截图生成配图,插入文档
- 网页预览、归档
-
基于浏览器打印功能,输出高质量 PDF
-
支持排版特性:
- 全屏图片:封面、页面背景
- 页眉:支持网页原生样式与布局
- 分页控制:使用 CSS 打印规则(如
page-break-before
),实现内容自动分页、章节分隔、避免内容断裂
应用场景:
- 标准化文档生成:如报告、表单等,支持图表(Echart、G2)
- 多场景复用(同构):一套页面实现,既能满足用户在线查看,也能满足后端 PDF 批量导出、归档
- 技术栈:Chrome Headless + Puppeteer + Node.js
- 特性
- 浏览器实例池化:降低启动延迟
- 任务队列:并发限流,支持异步处理大批量任务
- Docker 镜像化
方案类型 | 工具 | 问题 |
---|---|---|
浏览器渲染 | Selenium | 仅部分支持 |
方案类型 | 工具 | 问题 |
---|---|---|
基于编码 | iText / PDFBox | 开发复杂度高,设计还原度低 |
HTML 转 PDF | iText / OpenHTMLToPDF | 基于静态解析,无法执行 JS,仅支持 CSS2.1 |
浏览器渲染 | wkhtmltopdf | 基于旧版 QtWebKit(相当于 Chrome 50),对现代网页支持差 |
Selenium | 依赖浏览器兼容层,效率低。更偏向自动化测试场景 |
测试环境: 单个 Docker 容器(分配 10 个 CPU 核心,8G 内存),队列并发数 4
测试用例: 以“百度新闻首页”为目标页面生成 PDF,请求并发数 20
指标 | 2.5% | 50% | 97.5% | 99% | 平均 | 标准差 | 最大值 |
---|---|---|---|---|---|---|---|
延迟 (ms) | 6816 | 14555 | 18589 | 18675 | 13772.79 | 2535.12 | 18675 |
指标 | 1% | 2.5% | 50% | 97.5% | 平均 | 标准差 | 最小值 |
---|---|---|---|---|---|---|---|
请求数/秒 | 0 | 0 | 1 | 4 | 1.25 | 1.32 | 1 |
传输速率 | 0 B | 0 B | 1.12MB | 4.5MB | 1.4MB | 1.47MB | 1.12MB |
-
Docker 镜像
- 截图服务(包含 Chrome 133):pptr
- 前置任务队列:pptr-queue
示例
curl --request POST \
--url http://10.0.28.121:3001/jobs/urgent \
--header 'Content-Type: application/json' \
--data '{
"pages": [
{
"url": "https://news.baidu.com/",
"name": "example"
}
],
}'