puppeteer in docker

471 阅读1分钟
生成pdf功能

是通过node启用一个无头浏览器去访问一个url,然后截屏的。为什么不用在客户端用插件处理呢,是因为手机端也要能下载保存pdf,但是手机端的导出是以手机的可视区域处理的,达不到产品要求的,导出内容需要能直接打印。况且客户端导出会存在很多问题,比如样式之类的,在多页的情况,尤其明显。用的是puppeteer,需要注意的是Docker部署。最后,这个插件在docker截屏会有乱码的问题,需要安装字体文件,但是字体文件是需要版权的,所以可以去谷歌下载免费的中文字体文件(本次采用NotoSerifCJKsc-Regular.otf),然后在部署的时候,移到服务器目录就可以了。

开源字体下载 www.google.com/get/noto/

基础镜像

node:10.15.2-alpine:

原理需要安装浏览器的 cdn 镜像,然后指定浏览器的启动路径 例子传送门

node16 及以上

推荐使用官方方案 传送门

Puppeteer 提供了一个 Docker 映像,其中包括 Chromium 以及所需的依赖项和预安装的 Puppeteer 版本 hub.docker.com/r/buildkite…

FROM buildkite/puppeteer:10.0.0

ARG start_env
ENV START_ENV ${start_env}


RUN mkdir -p /home/Service
WORKDIR /home/Service

COPY ./package.json /home/Service/package.json

RUN npm config set registry https://registry.npm.taobao.org
RUN npm i

COPY ./ /home/Service

COPY ./app/public/NotoSerifCJKsc-Regular.otf  /usr/share/fonts/TTF

EXPOSE 7001
CMD npm run start:$START_ENV