问题描述:
在B/S项目中需要打印大量的图片,我们使用window.print,但是当数据量大至上万的时候,将图片加载出来需要一些时间,加载出来之后打印,如果用户关闭了打印界面会导致打印页的缺失。
解决思路:
1.IE,使用ActiveX控件,非IE,使用Flash插件。这种思路不同的浏览器开发方式不一样,IE/FF/GROME
2.开发一个exe,客户端安装到本地服务,使用HTTP通讯方式。通过JS发送HTTP请求给本地的服务,本地服务起一个小型的HTTP server接收请求,然后返回数据,JS解析,显示在UI上。比如将打印的参数传值到本地服务,本地服务去调用打印机,使浏览器资源得到释放。
我们使用第二种思路。
尝试了以下方法:
1.葡萄城SpreadJS
不采取原因:与我们原来用到的原理一样,基于浏览器的打印。
https://www.grapecity.com.cn/blogs/spreadjs-qa-blankofprint
2.葡萄城的ActiveReports
中有B / s端的打印使用window.print实现
另外有C / S端的打印,无法与浏览器交互,但是可以去改进
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=48785&extra=page%3D1
3. Lodop分为收费版与免费版
(1)使用Lodop插件,需要客户端安装一个服务,服务的端口默认是8000或18000
(2)如何购买和使用打印控件的Lodop的注册号
http://blog.sina.com.cn/s/blog_721e77e50100nfzs.html
(3)Lodop样例演示
http://www.lodop.net/LodopDemo.html
考量问题:
(1)免费版有水印
4. JCP分为收费版与免费版
安装程序需要替换
网官 http://printfree.jatools.com/
考量问题:
- 免费版只适合于IE浏览器
- 图片需要渲染到页面,打印时释放浏览器资源可以做其他操作
收费版jatoolsPrint支持大部分浏览器
5.jquery打印
底层是window.print方法