# V10.0SP1及更早版本Puppeteer打印补丁操作手册

# 前言

本文作为在线 Wiki 部署手册,用于指导实施人员在明确支持的低版本客户环境安装 Puppeteer 打印标准化补丁。标题中的“V10.0SP1 及以下”不表示任意低版本都可使用,只支持本文列出的 11 个版本。

V11 标准版本请查看同目录《V11发版-Puppeteer打印部署手册.md》。

本次正式补丁名称:V11版本puppeteer打印组件标准化代码低版本迁移补丁

正式补丁汇总包从以下 OBS 地址下载:

https://puppeteer-chromium.obs.cn-north-4.myhuaweicloud.com/patches/puppeteer-print-patch.zip

OBS 对象文件名为 puppeteer-print-patch.zip。该 ZIP 只包含代码补丁,不包含本文、其他 Markdown、图片或部署说明。必须先完整下载并解压该文件,实际结构为:

puppeteer-print-patch.zip
  V11版本puppeteer打印组件标准化代码低版本迁移补丁/
    01-Tomcat/<版本>/seeyon.zip
    02-S1正式PAK/<版本>/<对应版本PAK文件>.pak
    03-客开源码/<版本>/src.zip
    SHA256SUMS.txt

补丁汇总包不包含部署文档、PrintEngine 和容器镜像,这些内容分别通过在线 Wiki 和本文后续固定 OBS 地址提供。当前代码补丁 SHA256:

6e1a091baa6962035e64adf06bb9eb3b5a4a001d87f7f0436ddb342826f66efe

本文将 OBS 补丁解压后生成的以下目录简称为 <OBS补丁根目录>

V11版本puppeteer打印组件标准化代码低版本迁移补丁/

本文所有 Tomcat 补丁、S1 PAK 和客开源码路径均从 <OBS补丁根目录> 开始。实施人员应继续查看在线 Wiki,不要在代码补丁 ZIP 中查找部署文档。

# 一、支持版本

版本 OBS 补丁解压后的 Tomcat 文件 OBS 补丁解压后的 S1 文件 OBS 补丁解压后的客开源码
V8.0SP2 <OBS补丁根目录>/01-Tomcat/V8.0SP2/seeyon.zip <OBS补丁根目录>/02-S1正式PAK/V8.0SP2/QP_2607161354_PUPPETEER-COMMON-V8.0SP2.pak <OBS补丁根目录>/03-客开源码/V8.0SP2/src.zip
V8.0SP2_LTS <OBS补丁根目录>/01-Tomcat/V8.0SP2_LTS/seeyon.zip <OBS补丁根目录>/02-S1正式PAK/V8.0SP2_LTS/QP_2607161354_PUPPETEER-COMMON-V8.0SP2-LTS.pak <OBS补丁根目录>/03-客开源码/V8.0SP2_LTS/src.zip
V8.1 <OBS补丁根目录>/01-Tomcat/V8.1/seeyon.zip <OBS补丁根目录>/02-S1正式PAK/V8.1/QP_2607161354_PUPPETEER-COMMON-V8.1.pak <OBS补丁根目录>/03-客开源码/V8.1/src.zip
V8.1SP1 <OBS补丁根目录>/01-Tomcat/V8.1SP1/seeyon.zip <OBS补丁根目录>/02-S1正式PAK/V8.1SP1/QP_2607161354_PUPPETEER-COMMON-V8.1SP1.pak <OBS补丁根目录>/03-客开源码/V8.1SP1/src.zip
V8.1SP2 <OBS补丁根目录>/01-Tomcat/V8.1SP2/seeyon.zip <OBS补丁根目录>/02-S1正式PAK/V8.1SP2/QP_2607161354_PUPPETEER-COMMON-V8.1SP2.pak <OBS补丁根目录>/03-客开源码/V8.1SP2/src.zip
V8.2 <OBS补丁根目录>/01-Tomcat/V8.2/seeyon.zip <OBS补丁根目录>/02-S1正式PAK/V8.2/QP_2607161354_PUPPETEER-COMMON-V8.2.pak <OBS补丁根目录>/03-客开源码/V8.2/src.zip
V8.2SP1 <OBS补丁根目录>/01-Tomcat/V8.2SP1/seeyon.zip <OBS补丁根目录>/02-S1正式PAK/V8.2SP1/QP_2607161354_PUPPETEER-COMMON-V8.2SP1.pak <OBS补丁根目录>/03-客开源码/V8.2SP1/src.zip
V9.0 <OBS补丁根目录>/01-Tomcat/V9.0/seeyon.zip <OBS补丁根目录>/02-S1正式PAK/V9.0/QP_2607161354_PUPPETEER-COMMON-V9.0.pak <OBS补丁根目录>/03-客开源码/V9.0/src.zip
V9.0SP1 <OBS补丁根目录>/01-Tomcat/V9.0SP1/seeyon.zip <OBS补丁根目录>/02-S1正式PAK/V9.0SP1/QP_2607161354_PUPPETEER-COMMON-V9.0SP1.pak <OBS补丁根目录>/03-客开源码/V9.0SP1/src.zip
V10.0 <OBS补丁根目录>/01-Tomcat/V10.0/seeyon.zip <OBS补丁根目录>/02-S1正式PAK/V10.0/QP_2607161354_PUPPETEER-COMMON-V10.0.pak <OBS补丁根目录>/03-客开源码/V10.0/src.zip
V10.0SP1 <OBS补丁根目录>/01-Tomcat/V10.0SP1/seeyon.zip <OBS补丁根目录>/02-S1正式PAK/V10.0SP1/QP_2607161354_PUPPETEER-COMMON-V10.0SP1.pak <OBS补丁根目录>/03-客开源码/V10.0SP1/src.zip

# 二、总体原则

安装补丁后的机制优先级:

优先级 机制 生效规则
1 后台打印引擎模式 明确选择传统、本地或远程时优先生效
2 PrintEngine 存在性 后台未配置且存在 PrintEngine 时使用本地 Puppeteer
3 旧配置兼容 后台未配置且不存在 PrintEngine 时兼容旧项目化、本地或远程配置

生产环境应在后台明确选择打印引擎模式。

本次只支持两种新 Puppeteer 运行方案:本地 PrintEngine新远程容器。不要使用旧 Windows 手工安装 Node/Puppeteer/Chromium 的方式,也不要使用旧容器。

# 三、安装前确认

  1. 确认客户精确版本、SP、Build ID 和部署形态。
  2. 确认是否存在客开 class、JSP、JS、Spring 或国际化资源。
  3. 备份 A8 程序目录、数据库和将被覆盖的文件。
  4. 校验所选补丁 SHA256。
  5. 准备回滚文件和维护窗口。

# 四、更新补丁

# 非 S1/Tomcat 环境

使用:

OBS补丁根目录/01-Tomcat/版本/seeyon.zip

安装步骤:

  1. 停止 OA/Tomcat 服务。
  2. 解压对应版本 seeyon.zip,确认内部顶层目录为 seeyon/
  3. 按 zip 内相对路径备份现场同名文件。
  4. seeyon/ 为基础目录覆盖客户 A8 对应目录。
  5. 清理应用缓存和 JSP 编译缓存。
  6. 启动 OA,检查启动日志和系统参数页面。
  7. 按测试矩阵验证打印。

不同版本的 seeyon.zip 不得混用。

# S1 标准环境

使用:

OBS补丁根目录/02-S1正式PAK/版本/对应版本PAK文件.pak

安装步骤:

  1. 停止业务操作并完成程序和数据库备份。
  2. 在 A8/S1 标准补丁安装工具中选择与客户版本完全一致的 PAK。
  3. 按标准补丁流程执行校验、安装和重启。
  4. 检查补丁安装记录、启动日志和目标文件。
  5. 按测试矩阵验证打印。

禁止手工解压 PAK 覆盖。部分正式 PAK 条目经过加密,普通 ZIP 工具提示需要密码属于正常格式。

# 有客开源码的环境

使用:

OBS补丁根目录/03-客开源码/版本/src.zip

处理步骤:

  1. 在客户精确源码基线上建立分支。
  2. 合并 src.zip 中的 Java、JSP、JS、Spring 和国际化资源。
  3. 处理同名文件冲突,不用标准文件直接覆盖客户修改。
  4. 使用客户原有 JDK、Maven 和依赖配置完成编译。
  5. 非 S1 环境制作客户专属 seeyon.zip;S1 环境制作客户专属 BPO 输入并生成 PAK。
  6. 对客户专属包重新执行结构、SHA256、安装和业务验证。

标准运行态补丁和标准 PAK 不作为客开环境的直接覆盖包。

# 五、安装步骤

# 方案1、部署本地 PrintEngine

PrintEngine 不在补丁汇总 ZIP 内。按客户操作系统从以下固定 OBS 对象选择并下载运行包:

包名 适用环境 SHA256
PupCentos7Amd.7z (opens new window) CentOS 7 x86_64 1fe5e5dc5676ff712b777e5c6857bfc8145dfb7f129dc1f6c53c5c26bfdbcd59
PupLinuxAmd.7z (opens new window) CentOS 8+、Rocky、openEuler、Ubuntu x86_64 caf6136c9f4669e0405f7a98ef82037c4f325bd5ba5d262d448a2eec23e5ba9c
PupLinuxArm.7z (opens new window) UOS、麒麟等 ARM64 Linux 0c96c605b7b6ebdf7e284411ff3fa9e9059864e0a78ec2fcecf5fecd02f60596
PupWinHigh.7z (opens new window) Windows Server 2016 及以上 ad8cd0c977efb11ed6e26956ed5a8ef7b360789087f27b5f0958e50eca9759a5

校验 SHA256 后,将运行包直接解压到ApacheJetspeed目录同级:

&lt;A8安装根目录>
├── ApacheJetspeed/
└── PrintEngine/

PrintEngine结构:

PrintEngine/
  app/
    node_modules/
      puppeteer-core/
  chromium/
  node/
  fonts/
  libs/

不要多套一层压缩包目录。Linux 环境执行以下检查,Windows 不执行:

chmod +x <A8安装根目录>/PrintEngine/node/bin/node
chmod +x <A8安装根目录>/PrintEngine/chromium/chrome
ldd <A8安装根目录>/PrintEngine/chromium/chrome | grep "not found"

需要补充字体时,将字体放入 <A8安装根目录>/PrintEngine/fonts,Linux 执行 fc-cache -fv <A8安装根目录>/PrintEngine/fonts 后重启 OA。

# 方案2、部署远程 Puppeteer 新容器

容器镜像不在补丁汇总 ZIP 内。按宿主机架构从固定 OBS 对象选择镜像,加载后标签统一为:

puppeteer-service:V11-20260403

固定 OBS 下载地址:

架构 下载地址 SHA256
AMD64 https://puppeteer-chromium.obs.cn-north-4.myhuaweicloud.com/amd64/puppeteer-service-amd64.tgz 9444c17fef28fd5e5c65d28cd69fcf425380f6d8bf9c61c3d4638323c264af41
ARM64 https://puppeteer-chromium.obs.cn-north-4.myhuaweicloud.com/arm64/puppeteer-service-arm64.tgz 9ed16df8fc6a1f6edf821332a40dc3973afee30b37d336487b56ab378dcb95cf

下载后先执行 sha256sum <镜像文件名>,确认与上表一致

再执行 docker load -i <镜像文件名>

启动命令:

# 创建puppeteer目录
mkdir /data/Seeyon/Puppeteer-Service -p

# 启动容器
cd /data/Seeyon/Puppeteer-Service
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 $(pwd)/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:V11-20260403

需要补充字体时,将字体放入 /data/Seeyon/Puppeteer-Service/fonts

# 刷新字体
docker exec puppeteer-service fc-cache -f

# 查看已安装字体
docker exec puppeteer-service fc-list

健康检查:

curl -fsS http://127.0.0.1:16395/health

# 六、后台配置

系统管理员进入:

系统管理 -> 系统设置 -> 系统参数设置 -> 功能选项 -> 打印引擎模式

后台入口示意:

1784513820149.png

远程配置示意:

1784513837257.png

远程模式必须填写:

参数 填写内容
远程服务地址 A8 可访问的容器地址,例如 http://<容器宿主机IP>:16395
A8 callback 地址 容器可访问的 OA 地址,例如 https://oa.example.comhttp://<OA内网IP>:8080

外部 HTTPS 与内部 HTTP 的协议或端口不一致时,必须填写真实 A8 callback 地址。

# 七、专项问题说明

# 10.1 HTTPS 转内部 HTTP 端口错误

补丁已提供 A8 callback 地址配置能力。远程容器使用的 OA 地址应以“容器实际可访问”为准,不依赖浏览器访问地址自动转换。

验证时应从容器宿主机或容器内部访问配置的 callback 地址,并确认协议、端口、反向代理和证书均正确。

# 10.2 Windows 本地 Puppeteer 临时目录

本次 11 个版本的完整补丁均已包含 Windows Chrome profile 临时目录治理:

%TEMP%\seeyon-puppeteer

每次打印使用独立会话目录,正常结束后删除本次目录;下一次打印前清理超过 24 小时的历史会话目录。无需再叠加无版本标识的专项 JS 补丁。

# 八、验证清单

检查项 结果
客户版本与补丁目录完全一致
部署形态与 Tomcat/PAK/客开源码选择一致
补丁 SHA256 校验通过
后台只出现打印相关配置且国际化正常
本地或远程运行环境可用
A8 callback 地址从容器侧可访问
标准打印场景验证通过
Windows 本地模式临时目录可回收

详细测试矩阵见同目录《测试点与影响点.md》。

# 九、回滚建议

  1. 停止 OA 服务。
  2. S1 环境按标准补丁工具执行回滚;Tomcat 环境恢复安装前备份文件。
  3. 恢复原打印配置和原运行环境。
  4. 清理缓存后启动 OA。
  5. 验证原打印链路和日志。

# 十、实施结论

标准低版本客户按“精确版本补丁 + PrintEngine 或新容器”部署。S1 使用正式 PAK,非 S1/Tomcat 使用 seeyon.zip,客开环境使用 src.zip 合并后重新编译制包。

编撰人:het、wangyxyf