news 2026/6/28 1:17:29

Print.js 与 web-print-pdf 对比

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Print.js 与 web-print-pdf 对比

Print.js(npm 包名print-js)是前端里很常见的「把某段 HTML / PDF / 图片交给浏览器打印」工具。web-print-pdf则是「通过本地客户端静默出纸」方案。

两者名字里都有 print,但解决的问题层级不同。本文帮助你在Print.js 够用必须上 web-print-pdf之间做判断。Web打印专家客户端内也依赖类似「浏览器渲染」思路做 PDF,但最终出纸仍走本地打印栈,而非纯浏览器对话框。

资源链接
Web打印专家官网http://webprintpdf.com/
客户端下载http://webprintpdf.com/downloadApp/
web-print-pdfnpmhttps://www.npmjs.com/package/web-print-pdf
Print.js 官网https://printjs.crabbly.com/
GitHub(web-print-pdf)https://github.com/weixiaoyi/web-print-pdf

1. 核心差异(30 秒版)

Print.jsweb-print-pdf
本质封装window.print()/ iframe 打印WebSocket 调本地Web打印专家
打印对话框会弹出✅ 可静默(action: 'print'
指定打印机printerName
终端安装❌ 无✅ 需 Web打印专家
npm 体积小(逻辑在客户端)
典型场景后台导出、用户自助打一份柜面、批量、无人值守

结论前置:Print.js 适合「用户自己确认打印」;web-print-pdf 适合「系统必须把纸打出来」


2. Print.js 工作原理

Print.js 常见用法(与本项目vueApp中工具函数类似):

importprintJSfrom"print-js";printJS({printable:document.getElementById("report"),type:"html",scanStyles:false,style:`@page { margin: 5mm; } @media print { table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ccc; padding: 4px 8px; } }`,});

流程:

  1. 创建隐藏 iframe(或新窗口)
  2. 写入 HTML / 加载 PDF / 图片
  3. 调用window.print()
  4. 浏览器弹出系统打印对话框
  5. 用户选打印机、份数、确认

支持类型:htmlpdfimagejson(表格)等——轻量、接入快。


3. web-print-pdf 工作原理

importwebPrintPdffrom"web-print-pdf";awaitwebPrintPdf.printHtml(document.getElementById("report").innerHTML,{paperFormat:"A4",printBackground:true,margin:{top:"10px",bottom:"10px",left:"10px",right:"10px"},},{printerName:"HP-LaserJet",// 可选,建议 getPrinterList()paperFormat:"A4",copies:1,},{action:"print"});

流程:

  1. HTML 发到本机Web打印专家
  2. Headless 引擎生成PDF
  3. Windows:SumatraPDF;Linux/macOS:CUPSlp
  4. 无浏览器打印框(静默)
  5. 客户端记录日志,可排查失败原因

4. 能力对照表

能力Print.jsweb-print-pdf
打印 HTML 片段
打印 PDF URLtype: 'pdf'printPdfByUrl
打印图片printImageByUrl
自定义@page/ CSSstyle参数pdfOptions+ CSS
静默打印
指定打印机
双面 / 纸盒 / 份数❌(用户在对话框选)printOptions
批量连打⚠️ 循环调 printJS,多次弹窗batchPrint
预览与出纸一致⚠️ 浏览器预览 ≠ 打印引擎✅ 同一条 PDF 链路
统信 / 麒麟 / macOS 静默
内网 URL + CookieextraOptions
依赖安装Web打印专家

5. Print.js 更适合的场景

  1. 管理后台:用户导出/打印报表,可以接受弹窗选打印机
  2. 轻量 MVP:不想部署任何客户端。
  3. 打印频率低:偶尔打一页,体验要求不高。
  4. 已有@media print样式,只需触发浏览器打印。
  5. 移动端 / iPad:只能 AirPrint 手动打(Print.js 与window.print同类限制)。

本仓库vueApp/src/utils/fn.jsprintPdf即基于 print-js 的 HTML 打印封装——适合开发调试或非静默场景。


6. web-print-pdf 更适合的场景

  1. 柜面、窗口、自助机:不能让用户每次选打印机。
  2. 连打凭证 / 面单batchPrint,见 AIdocs 05 篇。
  3. 必须指定某台激光 / 针打(仍建议 PoC)。
  4. Windows + 国产桌面 + Mac同一套前端。
  5. 需要先preview看 PDF,再print出纸。
  6. 打印失败要查日志(WebSocket、队列、printerName)。

7. 从 Print.js 迁移时要注意什么

Print.js 习惯web-print-pdf 对应
printable: dom节点printHtml(element.innerHTML)
type: 'pdf', printable: urlprintPdfByUrl(url, …)
style: '...'写进 HTML<style>或页面 CSS
scanStyles: falseprintBackground: truepdfOptions
用户选打印机getPrinterList()+printerName
无客户端部署Web打印专家

迁移最小步骤:

  1. 安装客户端:http://webprintpdf.com/downloadApp/
  2. npm install web-print-pdf
  3. printJS({ type:'html', … })换成printHtml
  4. action: 'preview'对比版式后再改print

8. 能否同时保留两者?

可以,按入口区分:

importprintJSfrom"print-js";importwebPrintPdffrom"web-print-pdf";/** 用户自助:弹窗打印 */exportfunctionuserPrintHtml(el){printJS({printable:el,type:"html",scanStyles:false});}/** 柜面静默:指定打印机 */exportasyncfunctioncounterSilentPrint(html,printOptions){returnwebPrintPdf.printHtml(html,{paperFormat:"A4",printBackground:true},printOptions,{action:"print"});}
  • 管理端 / 移动端→ Print.js
  • 柜面工作站→ web-print-pdf

9. 与 window.print 的关系

Print.js不是Lodop 类本地服务,它本质仍是浏览器打印入口的糖

Print.js ≈ 更好的 window.print(HTML/PDF/图片) web-print-pdf = 本地客户端 + 静默 + 指定机

若需求从「偶尔打一下」升级为「必须静默」,换 Print.js 参数解决不了,需要换架构到 web-print-pdf。


10. 选型决策树

需要静默 / 指定打印机 / 批量? ├─ 否 → Print.js 或 window.print(简单够用) └─ 是 ├─ 能装本地客户端? │ ├─ 是 → web-print-pdf + Web打印专家 │ └─ 否 → 无法满足真静默(见 iOS / 纯浏览器限制,04 篇) └─ 还要跨国产 OS / Mac? └─ web-print-pdf

11. 小结

  • Print.js:轻、快、无客户端,适合用户手动确认的 HTML/PDF/图片打印。
  • web-print-pdf:适合生产级静默打印,需Web打印专家,与 Print.js互补而非简单替代
  • 很多项目后台用 Print.js,柜面用 web-print-pdf是务实组合。

联调 web-print-pdf:https://www.npmjs.com/package/web-print-pdf
下载客户端:http://webprintpdf.com/downloadApp/

Print.js 为第三方开源库,请以官方文档为准。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/28 1:08:24

DAY 10

浙大疏锦行 导入所需库 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_sc…

作者头像 李华
网站建设 2026/6/27 23:41:49

STM32 低功耗模式完全笔记 —— STM32 标准库实现

先说一个重要的名称问题: Stop1 / Stop2 是 STM32L 系列(超低功耗系列)的叫法,STM32F103 没有这个区分。 STM32F103 的三种低功耗模式叫:Sleep(睡眠)/ Stop(停机)/ Standby(待机)。 本笔记以 STM32F103 为主,最后附上 STM32L 系列 Stop1/Stop2 的区别说明。 一、为…

作者头像 李华
网站建设 2026/6/27 23:40:25

专业的agv可水洗粘尘垫企业哪家可靠

“明明刚换了新的粘尘垫&#xff0c;为什么AGV一跑&#xff0c;车间地面又脏了&#xff1f;而且还是满地胶印&#xff1f;”这或许是每一个试图靠传统方式维持洁净车间的管理者&#xff0c;都遭遇过的灵魂拷问。朋友老张是某食品包装企业的生产主管&#xff0c;去年夏天&#x…

作者头像 李华
网站建设 2026/6/27 23:39:26

GLP-1R靶点深度解析:结构、信号转导与临床转化

关键词&#xff1a;GLP-1R、B类GPCR、cAMP信号、偏向性激动、肠促胰素、代谢疾病引言胰高血糖素样肽-1受体&#xff08;GLP-1R&#xff09;是B1类G蛋白偶联受体&#xff08;GPCR&#xff09;家族的重要成员&#xff0c;在葡萄糖稳态调控中发挥关键作用。自2005年首个GLP-1受体激…

作者头像 李华
网站建设 2026/6/27 23:19:03

企业培训数字化转型——从制度到落地的全流程在线化实践方案

当"培训"从会议室搬上云端&#xff0c;企业的人才发展才真正拥有了可量化、可追溯、可复制的基础设施。本文以织码在线教育系统为实践载体&#xff0c;完整拆解企业培训从0到1的数字化搭建路径。一、为什么企业培训需要数字化转型&#xff1f; 传统企业培训有三大顽疾…

作者头像 李华