强烈推荐https://gitee.com/wuxue107/bookjs-eazy

当你用wkhtmltopdf转一个网页死活都转不成功的时候,很大可能是因为网页使用了ES6语法,wkhtmltopdf自带的浏览器内核版本过低,不支持ES6语法。

 

1、安装wkhtmltopdf

下载
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.centos7.x86_64.rpm
​
安装
sudo yum localinstall -y wkhtmltox-0.12.6-1.centos7.x86_64.rpm
​
查看版本
wkhtmltopdf -V
​
测试转码
wkhtmltopdf --disable-smart-shrinking --margin-left 0 --margin-right 0 --margin-top 0 --margin-bottom 0 --no-stop-slow-scripts --enable-external-links --enable-internal-links --debug-javascript --print-media-type --outline --outline-depth 3 --log-level info --orientation portrait --page-size A4 --javascript-delay 100 --window-status PDFComplete 网址 1.pdf

2、安装bookjs-eazy

使用docker方式

  • docker仓库为:wuxue107/screenshot-api-server

  • 容器内目录web根目录 /screenshot-api-server/public 为可挂载目录,里面可以放一些静态文件

  • 使用运行下面命令,会将当前目录作为,web根目录运行web服务,

docker pull wuxue107/screenshot-api-server
​
​
## -e MAX_BROWSER=[num] 环境变量可选,最大的puppeteer实例数,忽略选项则默认值:1 , 值auto:[可用内存]/200M
## -e PDF_KEEP_DAY=[num] 自动删除num天之前产生的文件目录,默认0: 不删除文件
## ${PATH}为public映射目录,该目录下有fonts和pdf两个目录。fonts为字体存放目录,转码时用到的字体文件就放在此目录下;pdf为转码后生成的pdf文件目录,该目录## 下的目录有效期遵循上面PDF_KEEP_DAY的配置
​
docker run -p 3000:3000 -td --rm -e MAX_BROWSER=1 -e PDF_KEEP_DAY=0 -v ${PATH}:/screenshot-api-server/public --name=screenshot-api-server wuxue107/screenshot-api-server
​
​
如果转码出来的pdf字体出现重叠等问题,需安装字体文件,同时html中需指定字体
## 上传字体文件到fonts目录下
cd ${PATH}/fonts/
## 到usr/share/fonts目录下找msyh.ttf丢到fonts里
## 重启服务
docker restart <cotainer_id>

使用node方式

git clone https://gitee.com/wuxue107/screenshot-api-server.git
​
cd screenshot-api-server
​
yarn && yarn start
​
# 安装yarn
npm install -g yarn
​
yarn -v // 查看yarn 版本
yarn config list // 查看yarn配置
yarn config get registry   // 查看当前yarn源
​
# 修改yarn源(此处为淘宝的源)
yarn config set registry https://registry.npm.taobao.org

3、API接口

/api/wkhtmltopdf-book
​
​
请求参数:
{
   // 由bookjs-eazy制作的网页
   "pageUrl": "https://bookjs.zhouwuxue.com/eazy-2.html",
   // 超时时间,可选,默认:30000
   "timeout": 30000,
   // 页面完成后(checkPageCompleteJs返回为true后)延迟的时间,可选,默认:0
   "delay" : 100,
   // 纸张
   "orientation": "portrait", // 纸张方向 "portrait","landscape"
   "pageSize":"A4", // 纸张大小
   // 或
   "pageWidth" : "210", //mm
   "pageHeight" : "297",
​
}
​
响应:
{
 "code": 0,
 "msg": "success",
 "data": {
   // 拼接上接口的前缀 http://localhost:3000/ 就是完整PDF地址
   // http://localhost:3000/pdf/1614458263411-glduu.pdf
   // 拼接上接口的前缀 http://localhost:3000/download/可以就可生成在浏览器上的下载链接
   // http://localhost:3000/download/pdf/1614458263411-glduu.pdf
   // 拼接上http://localhost:3000/static/js/pdfjs/web/viewer.html?file=/pdf/1614458263411-glduu.pdf
   // 可使用pdfjs库进行预览
   "file": "/pdf/1614458263411-glduu.pdf"
}
}