Java打印是个老大难的问题,下面就简单说下具体的解决方案。
单点打印:
1.js打印
window.print打印当前窗口页面,在封装下该方法即可实现页面指定区域打印,网上有相关插件,如jqprint,但打印出的文件清晰度不是很高。(IE8-不支持该功能)
2.PDF打印
PDF是Adobe公司的产品,由于Adobe公司早转入HTML5的环抱中了,大部分浏览器可直接浏览打印下载PDF文件。可以先将HTML页转成PDF文件再打印,该方案打印的效果好。
解决方案:wkhtmltopdf,该工具可将HTML页面转成PDF文档或者图片。官网http://wkhtmltopdf.org/下载后安装到服务器上,调用dos命令即可实现转换,Java代码示例Runtime.getRuntime().exec(“C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe https://www.baidu.com c:\1.pdf”)。
多点打印:
产品开发中经常会遇到多点自动打印的情况,如前台出订单后,仓库也需要自动出单。Java原生打印APIPrintable特别不友好,开发效率低,打印效果不理想。Java文档打印实际调用的是Windows的dos命令print /d:\\192.168.1.17\epson(打印机名称) d:\1.txt(文档),只能打印简单的TXT文档,其他文档打印效果极不理想,总出现乱码。根本原因是Windows操作系统不开源,Java很难获取Windows系统相关打印服务打印文件。
解决方案:微软平台实现打印的基本功能封装成dll文件,在通过Java的反射机制调用。实测微软打印接口代API友好,可以通过转义字符/r/n实现打印排版,并且打印出的字体也很清晰。
注意事项:将客户端的多个打印机设成共享,即可通过服务器调用客户端打印机实现打印。
打印机都有Windows的驱动,未必有Linux驱动,当服务器为Linux系统的时候,Linux系统无法获取Windows系统共享的打印服务,只能将其识别为一个文件夹。