无预览打印服务
无预览打印又称之为静默打印,指的是在网页中点击打印按钮就可以直接打印指定报表内容的打印方式,所以web中的无预览打印也称之为web中的静默打印。
我们知道,BaskReport是一款Web报表软件,报表内容查看是通过浏览器进行,所以基于原生浏览器的打印方式会出现打印预览窗口,然后点击这个打印预览窗口中的打印按钮才能将要打印的内容发送给打印机,完成打印工作。在某些项目中,客户可能会觉得这种基于原生浏览器的打印方式有些麻烦,要求提供无预览打印,也既点击应用中的打印按钮就把要打印的内容发送给打印机。
为了实现上述需求,我们开发了一个客户端打印服务应用,该应用基于Java实现,我们已经将其封装成可以在Windows环境下运行的exe文件,要实现无预览打印或静默打印,就可以在连接到具体打印机的Windows环境中安装好这个打印服务软件,就可以实现我们想要的无预览打印或者称之为静默打印。
无预览打印服务软件安装
点击此处下载这款专门为BaskReport提供无预览打印服务的软件,下载到本地后双击即可运行该软件。
文件时在下载连接上点击右键,从弹出菜单中选择 另存为
需要注意的是,这款打印服务软件基于Java开发,而下载包中未包含JRE,所以需要我们在运行该软件的操作系统中安装好JDK,还需要好具体的JAVA_HOME,同时还需要将JAVA_HOME下bin目录添加到系统的path中,这样这款打印服务软件才能运行。
软件运行后的效果如下图所示:
打印服务配置
打印服务可配置项只有两个:一个是要采用的打印机,另一个是对外提供服务的端品号。这两个配置无论修改了哪一个,要让其生效必须要点击边中的重置打印服务按钮,在端口号配置的下方,显示的当前打印服务采用的打印机以及正在监听的端口号。
选择正确的打印机
打印机列表中会把当前系统中所有的打印机在下拉列表中罗列出来,第一次采用的是系统的默认打印机,当然可以可以更改要使用的打印机。
设置对外提供服务的端口号
默认情况下,系统采用的是56565这个端口号对外提供服务,虽然可以修改,但如果未和系统中其它服务发生冲突,我们不建议修改这个端口号。
打印文件列表
下方的表格中罗列是正在打印的报表文件,打印完成的文件会自动从该列表中清除,如果打印过程中出现错误,出错的打印项会在这个列表中显示出来,我们可以根据需要查看,同时也可以点击下方的清理错误打印项按钮将错误的打印项清除。
后台运行
如果不想看到这个打印服务窗口,我们可以点击窗口右上方的关闭按钮,将打印服务放置到后台运行,如下图所示:
后台运行的打印服务,我们可以在windows状态栏里找到它,如下图所示:
双击该状态栏图标,或在该图标上点击右键在出现的菜单中选择Open,即可打开服务窗口;如果需要结束该打印服务,那么可以在该图标上点击右键在出现的菜单中选择Exit菜单项,这样就可以关闭该软件。
在BaskReport中调用无预览打印服务
从2.1.1版本开始,我们可以在BaskReport的Web预览工具栏配置里开启无预览打印服务项目,如下图所示:
默认情况下,这两个选项处于未勾选状态,这样我们在预览报表时工具栏的打印项里是看不到的,所以我们需要将其勾选方可使用,勾选后,我们就可以在预览报表上方的工具栏打印项里看到它们,如下图:
点击这两个打印项中的某一个,会弹出打印配置窗口,如下图所示:
在这个窗口中,我们首先可以看到当前要打印的报表的纸张类型,宽、高之类信息,需要注意的是这些信息是不可以修改的,原因是报表的内容在运行时会根据报表的纸张信息进行分页,所以在打印时不允许修改它的纸张相关信息。
窗口的下方允许我们配置打印的份数,BaskReport打印服务软件所在服务器的IP地址(默认的127.0.0.1表示本机),以及打印服务软件对外服务的端口号(该端口号默认是56565,如果修改了打印服务软件的对外提供服务的端口号,那么这里也需要做相应的调整)。
下方是在打印是是否采用双面打印,这个选项需要打印服务软件选择的打印机支持才行。
最后的 不再显示 选项如果勾选,那么下次再点击无预览打印按钮时将不会再显示这个配置窗口,而是会根据上一次配置信息直接将要打印的报表发送给打印服务器。
点击确定时,系统会把当前配置窗口中配置的打印服务器IP地址、端口号以及是否勾选不再显示 这三条信息一起保存到浏览器的localStorage,我们可以在浏览器的调试窗口中查看这些信息,如下图所示:
了解这个之后,如果我们在配置时勾选了不再显示复选框,同时又想再打开这个配置窗口,那么我们只需要将这个保存的配置项信息删除即可,这样在点击无预览打印按钮时又会弹出打印配置窗口。
在baskreport的JS API中调用无预览打印服务
从0.1.7版本开始,在baskreport的npm组件中,如果需要调用无预览打印服务,我们只需要设置BaskReport对象的doSlientPrint方法即可,调用后与上面介绍的操作方式一样,这里不再赘述。