
搜「js静默打印」很多人期待一行print()就出纸。现实是纯浏览器 JavaScript 调打印机几乎一定会弹预览框要无预览、指定机、连打得换架构。本文按「先讲清楚边界再给最小代码」写方便直接发技术社区。包名用web-print-pdf不放外链。先对齐JS 静默打印到底指什么业务常要三件事同时成立不弹浏览器打印对话框能指定打印机名字能控纸张、份数最好还能排队连打只做到「点按钮 → 弹出打印框」——那叫window.print不是静默。只做到「生成 PDF 下载」——那叫文件导出也不是出纸。为什么 JS alone 做不到浏览器安全模型禁止网页脚本偷偷驱动本地打印机。window.print()会进入系统/浏览器打印流程让用户可取消、可改机。第三方库若底层还是这条通道装再多也绕不过确认框。在setTimeout、fetch回调里强行print()还可能被当成非用户手势直接拦截。所以「控制台偶发成功、业务高峰偶发失败」很常见。结论一句话真正的 JS 静默打印 页面里的 JS 本机常驻的打印服务。最小可跑通写法工位电脑安装并启动配套客户端后前端npminstallweb-print-pdfimportwebPrintPdffromweb-print-pdfexportasyncfunctionsilentPrint(html,printerName){// 联调建议先 action: previewreturnwebPrintPdf.printHtml(html,{paperFormat:A4,printBackground:true,margin:{top:8mm,bottom:8mm,left:8mm,right:8mm},},{printerName,copies:1},{action:print,requestTimeout:15})}打印机名字用webPrintPdf.utils.getPrinterList()抄别手打猜。打印前可先getConnectStatus()客户端没开就别硬打。已有后端 PDF 的awaitwebPrintPdf.printPdfByUrl(pdfUrl,{},{printerName:仓内激光,copies:1},{action:print})注意客户端要能访问到这个 URL鉴权、内网域名、HTTPS 混用现场容易栽。上线前三分钟检查客户端开机自启了没有printerName和系统里显示的名字是否一字不差联调用过preview再改print没有收束搜「js静默打印」时别再在纯前端死磕 silent 参数。把权限放到本机客户端页面只负责提交 HTML/PDF 任务——这才是能交付的 JS 静默打印。包名搜web-print-pdf。本文不放链接。