当前位置: 首页 > Web前端 > HTML

突破技术限制,实现web端静默打印

时间:2023-03-28 11:06:44 HTML

作为web开发的同仁,估计都有一个共同的烦恼。为什么web端不能像CS端那样直接打印预览呢?只去掉打印预览界面不就行了吗?真实情况是Web端受限于浏览器的权限,无法直接访问打印机等本地资源。因此,实现Web端无预览、无打印不是一个简单的问题,而是一个突破权限、突破平台的问题。这导致用户在打印报表时至少要点击两个按钮才能完成打印。如果是需要批量打印的场景,用户需要反复点击按钮,非常麻烦。不明底细的甲方会很疑惑。这么简单的诉求,只需点击一下,省去一个操作步骤,你为什么做不到呢?这种对我们卑微的乙方的心灵折磨,也是我们头疼的问题。不是我们做不到,而是客观条件不允许我们做。作为WynEnterprise(读音:一)嵌入式BI和ActiveReports报表控件的高级技术顾问,这两年接触的客户基本不再使用Winform或WPF,大部分项目都迁移到B/S端,使用前后端分离架构或MVC。在这种情况下,客户将面临能够打印但无法直接连接打印机进行默认打印的问题。如果是物流行业的企业或者制造企业,在网页上打印是批量操作,比如物流单,每次批量打印几千张。如果每打印一张就弹出打印预览界面,可能用不了多久。我们可爱的派对A会炸毁我们的手机。在这样严峻的形势下,很多用户都追着问这个问题,web端实现静默打印的功能已经迫在眉睫。现在大部分的打印流程基本上都是将要打印的内容导出为PDF文件,然后调用浏览器的打印预览进行打印。既然已经迈出了第一步,那肯定有直接的方式来实现静默打印。以下是我搜索全网,觉得比较合适的内容。现在,我将与您分享结果。实现方式有两种:设置浏览器安装插件,使用代理软件就不多说了,直接晒货,看测试结果。哪里有设置浏览器的限制,哪里就有需求。由于打印时浏览器被限制,所以肯定有其他用户和我们有同样的需求。方法比难度还难。经过搜索,我们发现Chrome和Firefox浏览器的设置中都有解决方案。这个方法看起来不错,也有很多人喜欢:大致内容是:进入Chrome的高级设置,将浏览器的默认主页设置为我们的web应用需要静默打印页面。跟着介绍,我们也来操作。点击设置外观-设置显示首页按钮,进入我们要访问的网页。打开桌面快捷方式,修改后缀中输入--kiosk--kiosk-printing。但就在此时,道路被堵住了。系统会一直弹出如下错误,无法修改。让我们试试另一个浏览器。修改-firefox浏览器,在浏览器中输入:about:config在输入框中输入print.always\_print\_silent并设置为布尔类型,点击+号重启-测试打印这时候系统还是会弹出打印预览对话框,这个方法仍然无效。使用代理软件JSPrint简单易用。先使用Demo网站调用JSPrintManager打印接口接口,然后使用客户端作为代理实现打印。支持的平台有:windows10、IE、Edge、Firefox、Chrome、Safari。以下是一些常用的功能。使用用户选择打印机的示例代码:constcpj=newJSPM.ClientPrintJob();cpj.clientPrinter=newJSPM.UserSelectedPrinter();constprintFile=newJSPM.PrintFilePDF(fileUrl,JSPM.FileSourceType.URL,fileName,copiesNumber);cpj.files.push(printFile);awaitcpj.sendToClient();打印对话框将使用默认打印机出现.PrintFilePDF(fileUrl,JSPM.FileSourceType.URL,fileName,copiesNumber);cpj.files.push(打印文件);等待cpj.sendToClient();使用已安装的打印机constcpj=newJSPM.ClientPrintJob();cpj.clientPrinter=newJSPM.InstalledPrinter('MicrosoftPrinttoPDF);constprintFile=newJSPM.PrintFilePDF(fileUrl,JSPM.FileSourceType.URL,fileName,copiesNumber);cpj.files.push(printFile);awaitcpj.sendToClient();获取打印机列表:constprintersInfo=awaitJSPM.JSPrintManager.getPrintersInfo();控制台日志(打印机信息);JSPrintManager使用起来并不难,但是在使用过程中有一些明显的技术限制。在测试过程中,我们发现由于未知因素,旧的例子不能正常工作,需要创建一个新的例子来完成JSPrint静默打印调用;另外,该方法在火狐浏览器中无法正常执行。如果您使用的是MacOS,则需要注意,一旦您尝试使用JSPrintManager,您将无法卸载它。WynEnterprise实现在线报表设计、预览、静默打印一体化功能。WynEnterpriseV5.0Update1带来了突破性的报表打印——静默打印。示例下载:https://gcdn.grapecity.com.cn...;aid=MTgzNDk3fDg2YWRhNTgyfDE2NDA1OTEzMzd8MjkzODJ8MTM2MTU1操作步骤:1.启动打印代理服务(打印代理使用PowerShell脚本完成)。包含的文件如下:启动代理所需的环境资源:1.[VisualStudio2022](https://visualstudio.microsoft.com/vs/)17.0及以上(编译示例需要)2.[.NET6.0SDK](https://www.microsoft.com/net/download)3.【.NETCoreHostingBundle】(https://docs.microsoft.com/en-us...view=aspnetcore-5.0)(IIS部署环境)资源文件介绍:./switchPrinter.ps1切换默认打印机资源./start.ps1启动并安装打印服务。/stop.ps1停止服务。/build.ps1如果修改src文件夹中的文件,您需要启动脚本并重新编译它。项目会放在./PrintAgent文件夹下。/debug.ps1如果修改src文件夹,就可以使用这个脚本进行调试。启动代理服务器:下载样本后,先以管理员权限打开powershell工具,执行如下命令:执行命令Set-ExecutionPolicyBypass-ScopeCurrentUser-Force开启脚本执行,调用./switchPrinter.ps1命令选择要使用的默认打印机。/start.ps1命令启动服务,如果完成,调用./stop.ps1关闭案例2。启动成功后,我们运行WynReportDesigner或WynViewer例子:执行这些例子,默认打印机选项将被自动加载。满足打印需求。此示例代理使用GrapeCity的内部PDF打印库进行静默打印。Agent可以通过附带的powershellpowershell脚本启动,并在Windows10上注册autorun。配置成功后,可以看到点击打印按钮后,后台会连接默认打印机进行打印。综上所述,解决无声打印没有捷径可走。这种设置浏览器的方法看似很方便,但结果是没有效果。这时候使用代理是一种行之有效的方法,但是现成的智慧结晶往往需要一定的知识付费。不管怎样,方法总是比困难多。如果您遇到类似的需求,您不必担心。市场上已经有解决问题的有效方法。解决这个问题。