统信 UOS、银河麒麟与 Windows:一套 web-print-pdf 实现静默打印

很多单位是 Windows 工位 + 统信 UOS / 银河麒麟笔记本 混用,但业务只愿意维护一套前端打印代码

这篇说明:两种桌面打印栈不同,为何仍可用同一个 npm 包 web-print-pdf 对接 Web打印专家 ,并在统信、麒麟、Windows 上实现网页静默打印


两套系统,一种前端写法

Windows 统信 UOS / 银河麒麟
系统打印 Print Spooler CUPS
静默关键 本机客户端调 spooler 本机客户端调 lp
浏览器 print() 必弹窗 同样无法真正静默
前端接入 web-print-pdf web-print-pdf(同一包)

业务 Web 不必 if (统信) { ... } else { ... }:差异由用户本机安装的 Web打印专家 消化。


web-print-pdf 是什么

面向浏览器 / Vue / React / Angular 的 JavaScript 打印库

  • 把 HTML、URL、Base64(HTML / PDF / 图片)交给本机客户端
  • WebSocket 下发静默打印任务(默认 ws://127.0.0.1:16794
  • 不需要业务后端参与打印链路

Print.js(只能调浏览器打印框)、jsPDF(只生成文件、不驱动打印机)不同,web-print-pdf 面向生产环境静默出纸

包地址与官网(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/
bash 复制代码
npm install web-print-pdf

每台终端需安装 Web打印专家 并保持运行;官网下载页:https://webprintpdf.com/downloadApp/


跨平台示例:同一段代码,三处运行

以下在 Windows、统信 UOS、银河麒麟 上写法相同;仅 printerName 需填当前系统里的队列名。

javascript 复制代码
import webPrintPdf from "web-print-pdf";

const pdfOptions = { paperFormat: "A4" };

const printOptions = {
  printerName: "办公室激光",  // Windows:设置里的名称;国产桌面:lpstat -a 中的队列
  paperFormat: "A4",
  copies: 1,
};

const extraOptions = { action: "print" };

// 场景 A:页面内 HTML
await webPrintPdf.printHtml("<div>......</div>", pdfOptions, printOptions, extraOptions);

// 场景 B:服务端生成的 PDF
await webPrintPdf.printPdfByUrl("https://intranet/form.pdf", pdfOptions, printOptions, extraOptions);

// 场景 C:打开某个可打印 URL 再转 PDF 打
await webPrintPdf.printHtmlByUrl("https://intranet/report/printView", pdfOptions, printOptions, {
  ...extraOptions,
  requestTimeout: 30,
});

Vue 3 中(与客户端示例工程一致)

javascript 复制代码
import webPrintPdf from "web-print-pdf";

async function handlePrint() {
  const res = await webPrintPdf.printHtml(
    document.getElementById("print-area").innerHTML,
    { paperFormat: "A4" },
    { paperFormat: "A4" },
    { action: "print" }
  );
  console.log("print result", res);
}

批量 + 远程(政务 / 金融常见)

javascript 复制代码
// 批量
await webPrintPdf.batchPrint(
  [
    { data: "<div>回单 1</div>", type: "printHtml" },
    { data: "https://intranet/ticket2.pdf", type: "printPdfByUrl" },
  ],
  { paperFormat: "A4" },
  { paperFormat: "A4" },
  { action: "print" }
);

// 远程:WebSocket 收到服务端推送后
await webPrintPdf._printByRawMessage(messageJson);

更多参数(水印 watermark、页码 pageNumber、双面 duplexMode、预览 action: "preview")见 npm README:https://www.npmjs.com/package/web-print-pdf


统信 / 麒麟侧特别注意

  1. CUPS 先就绪lpstat -r 显示 scheduler 运行中
  2. 队列名一致printerName 与打印设置里完全一致
  3. HTML 先转 PDF:静默链路多为 HTML → PDF → CUPS,注意中文字体
  4. 专网:组件首次下载可走内网镜像(与 Windows 同一运维思路)

Windows 侧特别注意

  1. 杀毒白名单:360 等可能拦截无界面打印进程(客户端「环境说明」有路径指引)
  2. 中文打印机名:客户端会做名称校准

混合项目:同一份 web-print-pdf 代码,在 Windows 样机与统信 / 麒麟样机各验收一次。


集成方只需记住

复制代码
npm install web-print-pdf
  ↓
用户安装 Web打印专家(https://webprintpdf.com/downloadApp/)
  ↓
页面调用 printHtml / printPdfByUrl / batchPrint ...
  ↓
统信·麒麟 → CUPS 出纸;Windows → Spooler 出纸

Web 管业务,客户端管操作系统,web-print-pdf 管两者之间的那一根线。


验收建议

  1. 统信 UOS、银河麒麟各一台实机 + Windows 一台
  2. 同一 Vue 页面、同一 npm 依赖版本
  3. 静默:全程无浏览器打印对话框
  4. 指定打印机、A4、连续 5 单不堵队列
  5. 客户端未启动时,前端应有明确报错(连不上 WebSocket)

写在最后

统信 UOS、银河麒麟上的网页静默打印,答案在 本机客户端 + web-print-pdf ,不在浏览器的 print()

官网与下载:https://webprintpdf.com/ · https://webprintpdf.com/downloadApp/

npm:https://www.npmjs.com/package/web-print-pdf

用一条真实业务报表做 PoC,往往比争论「国产能不能静默」更快结案。

适配范围以正式交付清单为准。