统信 UOS、银河麒麟上如何实现网页静默打印?
在统信 UOS、银河麒麟等国产桌面上做 Web 系统,打印需求往往比 Windows 版来得晚,也更容易卡在最后一关。
业务问:「页面上点打印,能不能不弹浏览器对话框、直接出纸?」
开发答:「window.print() 只能调系统打印框……」
于是「国产系统 + 静默打印」变成需求文档里的硬骨头。
这篇说明为什么纯网页做不到、相对稳的架构是什么,以及如何用 web-print-pdf 在统信 / 麒麟上与 Windows 同一套前端代码完成静默打印。
先对齐:什么叫「网页静默打印」
不是页面里藏 iframe 自动 print(),而是:
- 用户在 B/S 系统里点「打印」
- 不出现浏览器自带打印对话框(或仅少数角色保留预览)
- 任务按指定打印机、纸张、份数进入 CUPS 队列并出纸
- 有日志可查:是没下发,还是驱动 / 队列问题
统信 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);
客户端内置 运行示例 页提供 printHtml、printPdfByUrl、batchPrint 等可运行 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 版本与驱动组合以项目兼容性测试为准。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)