“puppeteer” 将html转为pdf功能实现
puppeteer 功能介绍:
1,利用网页生成 PDF、图片,
2,爬取SPA应用,并生成预渲染内容(即“SSR” 服务端渲染)
3,自动化表单提交、UI测试、键盘输入等,
4,创建一个最新的自动化测试环境。可以直接在最新版 Chrome 中测试最新的 JavaScript 和 浏览器功能。
5,捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题,
6,测试 Chrome 插件
记录一下使用中的坑:
1,本地环境:windows,nodejs开发。 线上环境:linux,Docker部署
docker部署的时候真的是死活安装不上啊;然后各种查资料:
以下为解决方式:
部署设置:npm config set puppeteer_skip_chromium_download=1
node安装puppeteer跳过默认的chromium版本安装;
根据puppeteer官网介绍的选择版本:
"puppeteer": “^1.11.0”,
对应阿里源的相关配置https://mirrors.aliyun.com/alpine/v3.9/community/ 里面的x86_64目录下的chromium版本
docker配置文件中设置:
FROM node:9.11.1-alpine
RUN echo "https://mirrors.aliyun.com/alpine/v3.9/main/" > /etc/apk/repositories \
&& echo "https://mirrors.aliyun.com/alpine/v3.9/community/" >> /etc/apk/repositories \
&& echo "https://mirrors.aliyun.com/alpine/edge/testing/" >> /etc/apk/repositories \
&& apk -U --no-cache update && apk -U --no-cache --allow-untrusted add \
zlib-dev \
xorg-server \
dbus \
ttf-freefont \
chromium \
wqy-zenhei@edge \
bash \
bash-doc \
bash-completion -f
RUN mkdir -p /webapp
WORKDIR /webapp
COPY . /webapp
CMD [ "npm", "start" ]
然后安装完毕后,在使用的时候配置:
args 参数中的:
–disable-dev-shm-usage 是为了解决 Docker 中 /dev/shm 共享内存太小不足以支持 Chromium 运行的问题,详见 tips。
–no-sandbox 是为了避免 Chromium 在 Linux 内核中由 sandbox 导致的启动问题。
ignore-certificate-error 是为了设置Chrome忽略网站证书错误;(ps:线上环境https)
ignoreHTTPSErrors: true; 然后加上这个属性,证书验证忽略;
下面贴下我的代码段:
(async () => {
try {
//linux 目录添加executablePath;
browser = await puppeteer.launch({
executablePath: '/usr/bin/chromium-browser',
args: ['--disable-dev-shm-usage',
'--no-sandbox',
'--ignore-certificate-errors',],
ignoreHTTPSErrors: true});
//window 目录为puppeteer默认安装目录下 .local-chromium
// browser = await puppeteer.launch({});
page = await browser.newPage();
await page.goto(html路径, {waitUntil: 'networkidle2'});
await page.pdf({path: pdf路径, format: 'A4', printBackground: true});
browser.close();
} catch (e) {
console.log("generate Pdf error: " + e);
}
})();
在巨人的基础上记录的笔记,非常感谢大神们,留作笔记,仅供参考。如有错误,请指摘下非常感谢。