前言
官方文档
添加依赖
1 | npm install puppeteer@24.8.2 pdf-lib@1.17.1 |
其中
puppeteer
把HTML转为PDFpdf-lib
把封面、目录、正文的PDF进行合并
安装慢可以使用
1 | npm install -g cnpm --registry=https://registry.npmmirror.com |
puppeteer和puppeteer-core
安装puppeteer
,会下载Chrome可能时间比较长。
puppeteer-core
不会自动下载 Chromium,可以结合系统中已有的 Chrome浏览器使用。
puppeteer
1 | const puppeteer = require('puppeteer'); |
puppeteer-core
1 | npm i puppeteer-core@24.8.2 |
这种初始化的时候要指定chrome.exe
路径,使用edge不行。
1 | const puppeteer = require('puppeteer-core'); |
整体示例
页面样式
1 | .page { |
注意
A4是
201mm*297mm
导出脚本
1 | const puppeteer = require("puppeteer"); |
常用设置
初始化
1 | const browser = await puppeteer.launch({ |
注意
上面的参数中的
args
建议添加,添加后在Docker容器中才能正常运行。并且也不影响在非容器内的运行。
加载页面
1 | await page.goto("http://localhost:5173/cover.html", { |
waitUntil的值
"load"
等待页面的load
事件触发(即 HTML 文档完全加载并解析完成)。此时可能仍有图片等资源在加载。"domcontentloaded"
等待页面的DOMContentLoaded
事件触发(即 HTML 解析完成,无需等待样式表、图片等资源)。"networkidle0"
等待页面网络请求数量减少到 0 个(即没有任何网络活动)并持续 500 毫秒。这是最严格的策略,确保所有资源都加载完成。"networkidle2"
如上所述,等待网络请求数量 ≤2 并持续 500 毫秒。
等待页面加载完成
等待某个元素完成渲染
1 | // 等待某个元素完成渲染 |
延迟
1 | // 延迟1秒等待动画结束 |
脚本传参
调用脚本传参
test_para.js
1 | // 获取传入的参数 |
调用
1 | node test_para.js config=/data/test/paras.json other=show |
可以看到接收的数组
接收到的参数: [ ‘config=/data/test/paras.json’, ‘other=show’ ]
为了方便可以转为对象
1 | // 获取传入的参数 |
访问
1 | node .\index.js name="zhangsan" age=8 |
结果
接收到的参数: { name: ‘zhangsan’, age: ‘8’ }
服务器环境
在 Linux 上安装 Puppeteer 时,需要确保系统已安装必要的依赖库:
Debian/Ubuntu
1 | # 安装 Chrome 运行所需的依赖 |
CentOS/RHEL
1 | sudo yum install -y \ |
NodeJS
1 | # 安装 nvm |
Docker方式
在Linux上安装依赖和NodeJS会需要别的依赖,比较麻烦,这里提供使用Docker的方式构建
脚本
Dockerfile
1 | # 使用官方 Node.js 镜像 |
构建
1 | docker build -t puppeteer-docker . |
测试
调用容器内的JS
1 | docker run --rm puppeteer-docker node index.js |
调用Docker外的JS
1 | # CentOS下 |
复制字体
1 | cd C:\Windows\Fonts |