做 Web 打印的技术选型,十个项目里有八个会先想到 window.print() 或 Lodop 。它们不是「过时就没用」,但在 2026 年的 B/S 静默打印 场景下,边界已经很清晰。
本文对比 window.print、Lodop / C-Lodop、jsPDF、hiprint 与 web-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 核心优势
- 标准 npm 包,与框架无关
- 同一套 API 跨 Windows / macOS / 统信 / 麒麟
- HTML → PDF → 纸 全链路在客户端,数据不出终端
- 支持 batchPrint、远程打印、preview
- 客户端内置 运行示例,降低联调成本
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 为第三方商业产品,本文仅作技术对比,不代表任何授权建议。