统信 UOS银河麒麟等国产桌面上做 Web 系统,打印需求往往比 Windows 版来得晚,也更容易卡在最后一关。

业务问:「页面上点打印,能不能不弹浏览器对话框、直接出纸?」
开发答:「window.print() 只能调系统打印框……」
于是「国产系统 + 静默打印」变成需求文档里的硬骨头。

这篇说明为什么纯网页做不到相对稳的架构是什么,以及如何用 web-print-pdf 在统信 / 麒麟上与 Windows 同一套前端代码完成静默打印。


先对齐:什么叫「网页静默打印」

不是页面里藏 iframe 自动 print(),而是:

  1. 用户在 B/S 系统里点「打印」
  2. 不出现浏览器自带打印对话框(或仅少数角色保留预览)
  3. 任务按指定打印机、纸张、份数进入 CUPS 队列并出纸
  4. 有日志可查:是没下发,还是驱动 / 队列问题

统信 UOS、银河麒麟桌面底层通常是 Chromium 浏览器 + CUPS。Web 页本身碰不到 spooler,所以必须在用户本机多一层打印客户端


统信 / 麒麟上,纯浏览器方案卡在哪

window.print() 必弹窗 —— 即使用 UOS 浏览器、360 国产版也一样。
打印机能力在 CUPS —— 纸张、默认机、队列名与业务里存的字符串对不上就会静默失败。
不能指望机房代打 —— 出纸点必须在用户本机。
环境常不齐 —— CUPS 未启、lp 未装、字体缺失、PDF 引擎首次需下载,需要安装检测与文档配套。


推荐架构:web-print-pdf + Web打印专家

┌─────────────────┐   WebSocket (web-print-pdf)   ┌──────────────────┐
│  Vue / React 页面 │ ────────────────────────────► │ Web打印专家(本机) │
│  npm: web-print-pdf│                              │ HTML→PDF→CUPS    │
└─────────────────┘                              └────────┬─────────┘
                                                            ▼
                                                  统信 / 麒麟本地打印机
  • 浏览器:业务逻辑 + 调用 web-print-pdf
  • 本机客户端:接任务、转 PDF、走 lp 静默下发
  • 无需为打印单独搭 Java / Node 后端

包地址与官网(HTTPS)

资源 地址
npm 包 https://www.npmjs.com/package/web-print-pdf
GitHub 源码 https://github.com/weixiaoyi/web-print-pdf
官网 https://webprintpdf.com/
客户端下载 https://webprintpdf.com/downloadApp/

安装:

npm install web-print-pdf

前提:终端用户已安装并运行 Web打印专家;库通过 WebSocket 连接本机客户端(默认 ws://127.0.0.1:16794),客户端未启动时调用会失败。


使用案例

1. HTML 片段静默打印(柜面 / 报表最常见)

import webPrintPdf from "web-print-pdf";

const pdfOptions = {
  paperFormat: "A4",
  margin: { top: "20px", bottom: "20px", left: "20px", right: "20px" },
  printBackground: true,
};

const printOptions = {
  printerName: "HP-LaserJet",  // 与系统「打印管理」/ lpstat -a 中的队列名一致
  paperFormat: "A4",
  copies: 1,
};

const extraOptions = {
  action: "print",  // 静默打印;预览可设为 "preview"
};

await webPrintPdf.printHtml(
  "<div><h1>收费凭证</h1><p>……</p></div>",
  pdfOptions,
  printOptions,
  extraOptions
);

2. 按 URL 打印已有 PDF

await webPrintPdf.printPdfByUrl(
  "https://your-intranet/api/report/123.pdf",
  pdfOptions,
  printOptions,
  extraOptions
);

3. 按 URL 打印整页 HTML(OA 报表页)

await webPrintPdf.printHtmlByUrl(
  "https://your-intranet/oa/printPreview?id=10086",
  pdfOptions,
  printOptions,
  { ...extraOptions, requestTimeout: 30 }
);

4. 批量静默打印(窗口连打多张)

const printTaskList = [
  { data: "<div>凭证一</div>", type: "printHtml" },
  { data: "https://your-intranet/a.pdf", type: "printPdfByUrl" },
];

await webPrintPdf.batchPrint(printTaskList, pdfOptions, printOptions, extraOptions);

5. 远程打印(服务端推任务到柜面机)

业务服务通过 WebSocket 推送标准 JSON 消息,柜面页收到后交给客户端执行:

import webPrintPdf from "web-print-pdf";

// data 需含 id、timestamp、type 等字段,格式见客户端「远程打印」配置说明
await webPrintPdf._printByRawMessage(data);

客户端内置 运行示例 页提供 printHtmlprintPdfByUrlbatchPrint 等可运行 Demo,联调时可直接对照。


Web打印专家在统信 / 麒麟上的本机能力

  • CUPS 原生:列表、静默下发与系统打印管理一致
  • HTML → PDF → 纸:与 Windows 同一产品逻辑,国产侧走内置 PDF 引擎 + lp
  • 环境说明(中英):CUPS 未就绪、字体、组件下载等,应用内「环境说明」可查阅
  • 与 Windows 并存:同一套 web-print-pdf 调用,Windows 走 Spooler,国产桌面走 CUPS

实施与 PoC 清单

环节 建议
目标系统 明确统信 UOS / 银河麒麟具体版本与 CPU 架构
客户端 从 https://webprintpdf.com/downloadApp/ 安装 Web打印专家
前端 npm install web-print-pdf,复制上文示例改打印机名
CUPS lpstat -r 正常,队列名与 printerName 一致
验收 全程无浏览器打印框;lpstat -o 可见任务

小结

统信 UOS、银河麒麟不是不能网页静默打印,而是不能让网页独自完成。

web-print-pdf 管前端一行调用,用 Web打印专家 管 CUPS 与 PDF,是统信 / 麒麟项目上落地最快、与 Windows 混部时维护成本最低的一条路。

具体 OS 版本与驱动组合以项目兼容性测试为准。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐