# (最新)Puppeteer打印部署手册
# 背景
标准产品的CAP4报表等功能由于涉及很多后台算力,在进行报表打印时,均采用后端无头浏览器打印技术。
标准产品默认的后台打印使用PhantomJS技术,这种技术在信创环境支持较弱,同时随着PhantomJS不再维护,其功能在非信创环境下的兼容性也越来越差。
当项目上遇到无法使用默认的PhantomJS打印时,则需要考虑替代方案,目前市面推荐的是采用“Node+Puppeteer+Chromium”替代(后文均简称Puppeteer)。
Puppeteer: 是 Google Chrome 的 Headless 版本的一个工具,它提供了一个高级的 API 来控制 Chrome。与 PhantomJS 相比,Puppeteer 提供了更为强大的功能,并且是 Chrome 团队官方支持的项目。
哪些需要更换Puppeteer方案?
1、麒麟信创系统下,使用CAP4表单打印功能时(如报表打印、报表转发、CAP4表单转新闻公告空白或失败),提示“执行截图服务失败”。
2、客开使用htmltopdf接口,后台打印生成PDF进行归档操作失败,查看日志均体现在PhantomJS不可用。
3、移动端进行打印时,显示不全,上报BUG后研发建议更换为Puppeteer模式。
# 一、镜像信息
| 项目 | 值 |
|---|---|
| AMD64镜像 | puppeteer-service-amd64.tgz (opens new window) |
| ARM64镜像 | puppeteer-service-arm64.tgz (opens new window) |
| 服务端口 | 16395 |
| 内存建议 | 4GB |
| 磁盘空间 | 2GB+ |
# 二、部署步骤
# 2.1 下载镜像
从华为云OBS下载对应架构的镜像包:
# AMD64 架构
wget https://puppeteer-chromium.obs.cn-north-4.myhuaweicloud.com/amd64/puppeteer-service-amd64.tgz
# ARM64 架构(信创环境)
wget https://puppeteer-chromium.obs.cn-north-4.myhuaweicloud.com/arm64/puppeteer-service-arm64.tgz
# 2.2 解压并导入镜像
# 解压镜像
tar -zxvf puppeteer-service-amd64.tgz # AMD64
tar -zxvf puppeteer-service-arm64.tgz # ARM64
# 导入镜像
docker load -i puppeteer-service-amd64.tar # AMD64
docker load -i puppeteer-service-arm64.tar # ARM64
# 查看导入的镜像
docker images | grep puppeteer-service
# 2.3 启动容器
docker run -d \
--name puppeteer-service \
--restart unless-stopped \
--memory="4g" \
--memory-swap="6g" \
--cpus="4.0" \
--cpu-quota=-1 \
--shm-size="2g" \
--ulimit nofile=65536:65536 \
--ulimit nproc=65536:65536 \
-p 16395:16395 \
-e TZ=Asia/Shanghai \
-e NODE_ENV=production \
-e SAVE_SCREENSHOTS=true \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/screenshots:/app/screenshots \
-v /usr/share/fonts:/usr/share/fonts:ro \
-v /dev/shm:/dev/shm \
--cap-add=SYS_ADMIN \
--security-opt seccomp=unconfined \
--tmpfs /tmp:rw,noexec,nosuid,size=2g \
--tmpfs /run:rw,noexec,nosuid,size=256m \
puppeteer-service:latest
# 2.4 刷新字体缓存
# 刷新字体
docker exec puppeteer-service fc-cache -f
# 查看已安装字体
docker exec puppeteer-service fc-list
# 2.5 验证服务
# 检查容器状态
docker ps -a | grep puppeteer
# 检查服务健康状态
curl -s -X GET http://<服务器IP>:16395/health
# 查看容器日志
docker logs -f --tail 50 puppeteer-service
# 三、OA配置修改
# V10.0SP1及以下版本
编辑base/conf/systemCtp.properties配置文件,按示例增加配置,如下:
puppeteerPrint.printServer = true
# 将下列IP地址替换为puppeteer容器所在宿主机IP(容器端口默认16395)
puppeteerPrint.remoteUrl = http://10.1.131.118:16395
puppeteerPrint.switch = true
配置修改后需重启OA服务
# 四、打印测试
- 重启OA服务后,登录系统
- 使用CAP4表单打印功能进行测试
- 检查报表打印、报表转发等功能是否正常
# 五、镜像导出(用于离线部署)
如需在其他服务器部署,可将镜像导出为tar包:
# AMD64
docker save puppeteer-service:latest | gzip > puppeteer-service-amd64.tgz
# ARM64
docker save puppeteer-service:latest | gzip > puppeteer-service-arm64.tgz
# 六、常见问题
# Q1: 打印内容显示异常(缺少文字)
字体未正确加载,执行字体刷新:
docker exec puppeteer-service fc-cache -f
docker restart puppeteer-service
# Q2: 容器启动失败
检查内存和权限配置,确保足够的系统资源。
# Q3: 连接超时
确认防火墙已开放16395端口:
firewall-cmd --add-port=16395/tcp --permanent
firewall-cmd --reload
编撰人:wangyxyf
快速跳转