网页打印老方案 vs web-print-pdf:Lodop、window.print 还要不要用?

做 Web 打印的技术选型,十个项目里有八个会先想到 window.print()Lodop 。它们不是「过时就没用」,但在 2026 年的 B/S 静默打印 场景下,边界已经很清晰。

本文对比 window.print、Lodop / C-Lodop、jsPDF、hiprintweb-print-pdf + Web打印专家,帮你判断老方案要不要留、新方案怎么接。

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

1. 选型前先问三个问题

问题 若答案是「是」
必须不弹浏览器打印对话框? 排除纯 window.print
必须指定打印机 / 纸盒 / 双面 排除纯前端 PDF 下载
要支持 Windows + 国产 Linux + macOS 混部? 优先跨平台本地客户端方案

2. 方案全景对比

维度 window.print Lodop / C-Lodop jsPDF / 浏览器打 PDF hiprint 等预览插件 web-print-pdf + Web打印专家
静默(无对话框) ❌ 必弹窗 ⚠️ 需装 C-Lodop 服务 ❌ 仅下载文件 ❌ 偏预览
指定打印机 ⚠️ 有限
HTML 复杂报表 ⚠️ 依赖浏览器排版 ✅ 模板强 ⚠️ 需手工布局 ✅ 拖拽设计 ✅ Playwright 渲染
跨浏览器 ⚠️ 依赖本地服务 ✅(Chromium 系最佳)
macOS / 国产 OS 仅弹窗 ⚠️ 以 Windows 为主 ✅ 生成文件 ✅ 预览 ✅ 多平台客户端
前端接入 一行 JS 脚本 + 模板语言 npm 库 npm + 设计器 npm install web-print-pdf
终端依赖 C-Lodop 本地程序 通常无 Web打印专家
维护成本 中(授权/版本) 低(统一 npm API)

3. window.print:什么时候还用?

3.1 原理

调用浏览器内置排版 → 弹出系统打印对话框 → 用户手动选打印机确认。

3.2 适用场景

  • 对内 OA「用户自己打一份」
  • 静默无硬性要求
  • 快速 MVP

3.3 不适用

  • 柜面 / 窗口 一键出纸
  • 指定打印机、批量连打
  • 无人值守自助机

3.4 结论

保留作「手动打印」入口可以,不能作为静默打印方案。


4. Lodop / C-Lodop:经典方案的真实边界

4.1 原理

  • 早期 Lodop 插件(ActiveX / NPAPI)
  • 现行主流 C-Lodop:本机跑一个打印服务,网页 JS 调本地端口发指令

4.2 优势(为什么老项目还在用)

  • 国内政务 / 金融项目历史存量大
  • 针式打印机、连续纸、精确坐标 支持成熟
  • 模板语言控制细粒度

4.3 痛点(新项目要评估)

痛点 说明
终端必须装 C-Lodop 与 Web打印专家 同类「本地代理」,但 API 不通用
跨平台 macOS / 国产 Linux 支持弱于 Windows
与现代前端栈 Vue 3 / React 需额外封装;TypeScript 类型匮乏
静默与权限 仍依赖本地服务;浏览器升级后要跟版本
团队知识 新成员要学 Lodop 模板语法

4.4 与 web-print-pdf 如何选?

选 Lodop 选 web-print-pdf
已有大量 Lodop 模板,迁移成本高 新项目或愿意统一 API
强依赖针式坐标打印 HTML/CSS 报表为主
仅 Windows 封闭环境 Windows + 统信 + 麒麟 + macOS
采购已有 Lodop 授权链 希望 npm install 标准接入

结论 :Lodop 不是不能用 ,而是 不适合作为新 B/S 跨平台静默打印的唯一方案。混合部署时可并存:老窗口 Lodop,新模块 web-print-pdf。


5. jsPDF / html2canvas:别和「打印」混淆

5.1 能做什么

  • 前端生成 PDF 文件
  • 用户下载后自己打开打印

5.2 不能做什么

  • 驱动真实打印机静默出纸
  • 指定队列、纸盒、双面

5.3 结论

适合 导出 PDF ,不适合 静默打印 。可与 web-print-pdf 配合:后端或客户端生成 PDF 后,用 printPdfByUrl 出纸。


6. hiprint 等「可视化打印设计器」

6.1 定位

模板设计 + 预览,让用户在浏览器里看到「像打印出来一样」的版式。

6.2 与 Web打印专家 的关系

  • hiprint:设计态 / 预览态 体验好
  • web-print-pdf:出纸态 ------ 把 HTML 交给本地客户端静默打印

不少团队 hiprint 设计模板 → 导出 HTML → printHtml 出纸,两者互补而非互斥。


7. web-print-pdf + Web打印专家:新方案的支点

7.1 架构

复制代码
Vue/React  ──web-print-pdf──►  Web打印专家(本机)  ──►  系统打印栈

7.2 核心优势

  1. 标准 npm 包,与框架无关
  2. 同一套 API 跨 Windows / macOS / 统信 / 麒麟
  3. HTML → PDF → 纸 全链路在客户端,数据不出终端
  4. 支持 batchPrint、远程打印、preview
  5. 客户端内置 运行示例,降低联调成本

7.3 代码对比(同等需求:打印 HTML 片段)

window.print:

javascript 复制代码
window.print(); // 必弹对话框,无法指定打印机

web-print-pdf:

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

await webPrintPdf.printHtml(
  html,
  { paperFormat: "A4", printBackground: true },
  { printerName: "前台打印机", copies: 1 },
  { action: "print" }
);

8. 迁移决策树

复制代码
需要静默打印?
├─ 否 → window.print 足够
└─ 是
    ├─ 仅 Windows + 已有 Lodop 模板?
    │   ├─ 是 → 可继续 Lodop,或分批迁移
    │   └─ 否 → web-print-pdf
    ├─ 需要 macOS / 国产 OS?
    │   └─ 是 → web-print-pdf + Web打印专家
    └─ 只要 PDF 下载?
        └─ jsPDF,不走打印栈

9. 小结:还要不要用老方案?

方案 建议
window.print 留作「用户手动打」;不要承担静默打印
Lodop 存量维护可以;新模块优先评估 web-print-pdf
jsPDF 做导出;出纸交给 printPdfByUrl
hiprint 设计与预览;出纸与 web-print-pdf 组合
web-print-pdf 新项目默认选项 ,终端装 Web打印专家

没有「唯一正确」的技术宗教,只有 场景是否匹配 。若你的目标是 现代 B/S + 跨平台 + 静默 + 指定打印机,web-print-pdf 这条路的总拥有成本通常更低。

Lodop 为第三方商业产品,本文仅作技术对比,不代表任何授权建议。