“puppeteer” 将html转为pdf功能实现

“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);
            }
        })();

在巨人的基础上记录的笔记,非常感谢大神们,留作笔记,仅供参考。如有错误,请指摘下非常感谢。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值