您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

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

时间:2022-01-04 10:15:21  来源:  作者:葡萄城GrapeCity

作为Web开发的同僚们,估计都有一个共同的烦恼,Web端为什么不能够像 CS端那样直接打印预览?直接移除掉打印预览界面不就可以了?

真实情况是Web端受限于浏览器的权限,无法直接访问打印机等本机资源。所以,在Web上实现无预览和打印并不是一个简单的问题,而是突破权限、突破平台的问题。这就导致了用户在打印报表时,至少需要点击两个按钮才能完成打印,如果是需要批量打印的场景,用户则需要重复多次点击按钮,非常麻烦。

而不了解详细内情的甲方则会非常不解,这么简单的一个诉求,只是省去点击一个操作步骤,为什么你们办不到呢?

这种对于我们卑微乙方的灵魂拷问,让我们也很头疼,不是我们办不到,是客观条件不允许我们办到。

作为一个资历比较老的 Wyn Enterprise(读音:One)嵌入式BI和ActiveReports报表控件的技术顾问,这两年接触的客户,基本不再使用 Winform或WPF了,大部分项目都迁移到B/S 端,采用前后端分离的架构,或者 MVC。

在这种情况下,客户都会面临需要打印却无法直接连接打印机,进行默认打印的能力。如果是物流行业的企业或者生产制造企业,网页端打印,都是批量性的操作,比如物流单,每次批量打印上千张,如果每打印一张弹出一次打印预览界面,可能用不了多久,我们的可爱的甲方会将我们的电话打爆炸。

在如此“严峻“的形势之下,外加众多用户都追着询问这个问题,静默打印在 Web端的功能实现也是非常急迫的。

现在大部分打印过程基本是将需要打印的内容导出为PDF文件,然后调用浏览器的打印预览,进行打印。既然有了第一步,就一定有直接实现静默打印的方法。以下是本人搜索全网,觉得比较合适的内容,现将结果分享给大家。

实现思路有两种:

  1. 设置浏览器
  2. 安装插件,使用代理软件

话不多说直接干货,看看测试结果。

设置浏览器

有限制的地方就会有需求,既然打印时浏览器限制,那么就一定也有别的用户也有我们同样的需求,方法总比困难多。搜索后,我们找到在Chrome 和火狐浏览器的设置中,有解决的方法,这法子看着像模像样,点赞也很多:

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

 

大致内容是:

  1. 进入 Chrome的高级设置,设置浏览器默认的主页为我们的 Web应用需要静默打印的页面。跟着介绍,我们也操作起来。
  • 点击设置
  • 外观-设置显示主页按钮,并输入我们要访问的 Web页面。
突破技术限制,实现Web端静默打印

 

  • 打开桌面快捷方式,修改在后缀输入--kIOSk --kiosk-printing。

而走到这一步,此路就不通了。系统会一直弹出如下的错误,无法修改。

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

 

让我们换个浏览器试试。

  1. 修改-火狐浏览器
  2. 在浏览器输入:about:config
  3. 在输入框输入 print.always_print_silent

并设置为Boolean 类型,点+号

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

 


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

 

  • 重启-测试打印

此时系统依然会弹出打印预览对话框,此方法依旧无效。

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

 

使用代理软件

JSPrint

使用方法简单,先用Demo网站调用JSPrintManager打印接口,然后使用客户端进行代理,就可以实现打印。支持的平台有:windows 10, IE,Edge, 火狐,Chrome,Safari。

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

 

下面是一些常用能介绍。

使用用户选择打印机代码示例:

const cpj = new JSPM.ClientPrintJob();
cpj.clientPrinter =  new JSPM.UserSelectedPrinter();
const printFile = new JSPM.PrintFilePDF(fileUrl, JSPM.FileSourceType.URL, fileName, copiesNumber);
cpj.files.push(printFile);
await cpj.sendToClient();

会出现打印对话框

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

 

使用默认打印机

const cpj = new JSPM.ClientPrintJob();
cpj.clientPrinter =  new JSPM.DefaultPrinter();
const printFile = new JSPM.PrintFilePDF(fileUrl, JSPM.FileSourceType.URL, fileName, copiesNumber);
cpj.files.push(printFile);
await cpj.sendToClient();

使用安装的打印机

const cpj = new JSPM.ClientPrintJob();
cpj.clientPrinter =  new JSPM.InstalledPrinter('Microsoft Print to PDF);
const printFile = new JSPM.PrintFilePDF(fileUrl, JSPM.FileSourceType.URL, fileName, copiesNumber);
cpj.files.push(printFile);
await cpj.sendToClient();

获取打印机列表:

const printersInfo = await JSPM.JSPrintManager.getPrintersInfo();
console.log(printersInfo);

JSPrintManager使用起来并不难,但在的使用过程中,存在一些较为明显的技术限制。 在测试过程中,我们发现由于未知的因素,会出现旧示例无法使用工作,需要我们新建一个示例来完成JSPrint的静默打印的调用;除此之外,这种方法在火狐浏览器中无法正常执行。如果你是mac OS需要注意,一旦试用JSPrintManager将无法卸载。

Wyn Enterprise

实现在线报表设计,预览及静默打印一体功能Wyn Enterprise V5.0 Update1 带来了突破性的报表打印——静默打印。

操作步骤:

1、启动打印代理服务(打印代理是使用PowerShell 脚本完成的)

包含文件如下:

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

 


启动代理必须的环境资源:
1、【Visual Studio 2022】
2、【.NET 6.0 SDK】
3、【.NET Core Hosting Bundle】
资源文件介绍:

./switchPrinter.ps1 切换默认的打印机资源

`./start.ps1` 启动和安装打印服务

./stop.ps1 停止服务
./build.ps1 如果修改了 src文件夹下的文件,需要启动该脚本,进行重新编译,编译的项目会放置在./PrintAgent 文件夹中
./debug.ps1 如果修改了src文件夹,可以使用该脚本进行调试。
启动代理服务器:
将示例下载后,以管理员权限打开powershell 工具可先执行以下命令:
- 执行命令 Set-ExecutionPolicy Bypass -Scope CurrentUser -Force 启用执行脚本功能

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

 

- 调用 ./switchPrinter.ps1 命令选择默认的打印机

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

 

- 使用 ./start.ps1 命令启动服务,如果结束后,调用./stop.ps1 关闭案例

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

 


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

 


2、启动成功后,我们再来运行 WynReportDesigner 或WynViewer示例:
执行这些示例,会自动加载到默认的打印机选项,实现打印需求。

该示例代理使用葡萄城内部的PDF打印库进行无声打印。可以通过附件中的powershell脚本启动Agent并在Windows 10上注册其自动运行。

配置成功后,可以看到点击打印按钮后,后台会连接默认的打印机进行打印。

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

 

总结

解决静默打印是没有捷径可以走的,设置浏览器该方法是看着是非常便捷,但是并无效果。这时使用代理是一个行之有效的方法,但是现成的智慧结晶往往需要一些知识付费。Anyway,方法总比困难多,如果大家在遇到类似的需求时,也不用发愁,现在市面上已经出现了行之有效的方法去解决这个问题。



Tags:静默打印   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
作为Web开发的同僚们,估计都有一个共同的烦恼,Web端为什么不能够像 CS端那样直接打印预览?直接移除掉打印预览界面不就可以了?真实情况是Web端受限于浏览器的权限,无法直接访问打...【详细内容】
2022-01-04  Tags: 静默打印  点击:(0)  评论:(0)  加入收藏
▌简易百科推荐
作为Web开发的同僚们,估计都有一个共同的烦恼,Web端为什么不能够像 CS端那样直接打印预览?直接移除掉打印预览界面不就可以了?真实情况是Web端受限于浏览器的权限,无法直接访问打...【详细内容】
2022-01-04  葡萄城GrapeCity    Tags:静默打印   点击:(0)  评论:(0)  加入收藏
静态路由是一种需要管理员手工配置的特殊路由。静态路由在不同网络环境中有不同的目的:•当网络结构比较简单时,只需配置静态路由就可以使网络正常工作。•在复杂网络...【详细内容】
2021-12-31  思博网络SPOTO    Tags:静态路由   点击:(13)  评论:(0)  加入收藏
实验拓扑 图 1-1实验需求 深圳总部在内网中旁挂 SSL VPN 作为 VPN 设备,长沙分公司在内网中旁挂 WOC 作为 VPN 设备 配置 Sangfor VPN,深圳总部作为服务端,长沙分公司作为客户...【详细内容】
2021-12-31  武汉金信润天    Tags:VPN   点击:(8)  评论:(0)  加入收藏
什么是cpolar?cpolar是一种安全的内网穿透云服务,它将内网下的本地服务器通过安全隧道暴露至公网,使得公网用户可以正常访问内网服务。 它能用在哪些场景? 微信公众号开发,实时断...【详细内容】
2021-12-31  cpolar内网穿透    Tags:内网穿透   点击:(9)  评论:(0)  加入收藏
写一个shell获取本机ip地址、网关地址以及dns信息。经常会遇到取本机ip、网关、dns地址,windows一个命令ipconfig /all全部获取到,但linux系统却并非如此。linux系统都自带ifc...【详细内容】
2021-12-27  K佬食古    Tags:shell   点击:(15)  评论:(0)  加入收藏
步骤1、配置 /etc/sysconfig/network-scripts/ifcfg-eth0 里的文件。it动力的CentOS下的ifcfg-eth0的配置详情:[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifc...【详细内容】
2021-12-24  忆梦如风    Tags:网卡   点击:(13)  评论:(0)  加入收藏
1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录find . -name “*.tar” -execmv {}./backup/ ;注解:find –name 主要用于查找某个文件名字,-exec 、xargs可...【详细内容】
2021-12-17  郭主任    Tags:运维   点击:(26)  评论:(0)  加入收藏
对于经常上网的朋友来说,除了手机购物上网,pc端玩网页游戏还是很多小伙伴首选的,但是有时候明明宽带链接上了,打开浏览器却出现上不了网的现象,下面小编要来跟大家说说电脑有网络...【详细内容】
2021-12-16  小白系统    Tags:网页无法打开   点击:(32)  评论:(0)  加入收藏
在访问像github、gitlab这样的外国网站时,很有可能会出现页面加载不出来或找不到页面的错误。这时候有的朋友就会以为是网络的问题,于是把Wifi断掉连上自己手机的热点,结果却还...【详细内容】
2021-12-15  启施技术IT狼叔    Tags:外网   点击:(23)  评论:(0)  加入收藏
网络地址来源:获取公网IP地址 https://ipip.yy.com/get_ip_info.phphttp://pv.sohu.com/cityjson?ie=utf-8http://www.ip168.com/json.do?view=myipaddress...【详细内容】
2021-12-15  韦廷华12    Tags:外网ip   点击:(19)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条