puppeteer在linux部署并导出pdf

1,461 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

本文写于2020年9月,当时遇到一个需求,在题库系统中选择一些题目组成试卷,并将试卷导出用于打印。最终方案采用使用nodejs调用puppeteer访问页面,在页面渲染完毕后把页面保存为pdf。这里记录下在部署服务时遇到的一些问题。 puppeteer是chrome的无界面浏览器的nodejs工具包,提供了一系列高级API供服务端使用,官网地址 github.com/puppeteer/p…

由于其本身需要使用浏览器界面渲染,故在有界面安装过浏览器的操作系统(如windows)可以直接用,在linux需要先部署环境

在linux的centOS7上安装执行成功,将网页生成了pdf,在这里列一下步骤。

  1. 安装最新版nodejs,并配置npm,从其他服务器拷贝的nodejs的zip包会导致软连接失效,从而使npm无法使用,故拷贝nodejs时需要使用tar来压缩,或者直接用wget下载最新版

  2. 初始化工程,使用npm安装puppeteer,安装时有服务器安装失败,应该是权限问题,增加参数后正常了,使用root安装     npm install --unsafe-perm --registry=https://registry.npm.taobao.org,不加该参数--unsafe-perm会默认使用nobody,可能有权限问题,指定国内仓库,速度会快很多

  3. 安装依赖,此步来源于网络 www.cnblogs.com/lzs-888/p/1…

    1. 依赖库
      yum install nss pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 libwmf -y

    2. 字体
      yum install ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc -y

    3. 增加中文字体,没有中文字体汉字会乱码,从windows拷贝ttf文件过去安装,我这里安装微软雅黑,参考文档 —— www.cnblogs.com/xiaochina/p…

      1. cd /usr/share/fonts/ 
      2. 将字体拷过去,可以从C:\Windows\Fonts  这个文件夹下找
      3. mkfontscale       //字体扩展
        mkfontdir           //新增字体目录
        fc-cache -fv      //刷新缓存
      4. 验证字体安装情况 fc-list
  4. 启动程序,注意launch的时候需要指定非沙盒环境,否则报错,具体参数参考官网文档

    1. const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});