6 云打印JCP有两种打印模式,本地打印,和云打印,而云打印又可分为点对点打印,和服务端集中打印。
本文档的前面部分,都在讲本地打印,现在我们来看看两者的区别: 6.1 本地打印当JCP 处于本地打印模式时,其作用类似传统的打印插件工具(只不过实现方式不同于插件而已),就是将浏览器中的内容,打印到与本机连接的打印机中,其打印流程如下: ü 从2.JCP打印站的浏览器,访问 1.HTTP服务器上,引用jcp.js的页面; ü 从页面中,点击打印按钮; ü jcp.js访问本地 JCP服务; ü 本地JCP服务调用Win32 Print API 打印到本地打印机,3.打印机。
6.2 云打印-点对点打印点对点打印,就是某一设备通过浏览器,将打印内容打印到到某一与JCP打印站连 接的打印机中。该设备通过HTTP发送打印指令到JCP站,因此,可以是 Android,IOS,Linux设备,且不必安装 JCP。 下面以上图为例,描述 5.移动设备 打印到 4.打印机 的流程: ü 从5.移动设备的浏览器,访问 1.HTTP服务器上引用jcp.js的页面; ü 点击页面中的打印按钮; ü jcp.js访问 2.打印站,查询到3.JCP打印站 的IP 地址; ü jcp.js将打印指令发送到 3.JCP打印站; ü 3.JCP打印站调用Win32 Print API 打印到本地打印机,4.打印机。
6.3 云打印-服务端集中打印
服务端集中打印,就是若干客户端使用HTTP,将打印内容发送到同一打印站的打 印。与点对点打印类似,客户端不必是Windows系统,也不必安装JCP 服务端。 下面以上图为例,描述 5.移动设备 打印到 3.打印机 的流程: ü 从5.移动设备的浏览器,访问 1.HTTP服务器上引用jcp.js的页面; ü 点击页面中的打印按钮; ü jcp.js将打印指令发送到 2.JCP打印站 ; ü 2.JCP打印站调用Win32 Print API 打印到本地打印机,3.打印机。
6.4 发现打印站点进行打印 (本地必须安装 JCP)发现打印站点进行打印 如果你已经安装了 jcp.exe,那么,你可以使用 JCP找出局域网内所有装了jcp.exe的机子。 1. getJCP().findJCPs(function(jcps/*装有jcp.exe的机子ip,数据类型为数组*/) { 2. if (jcps) { 3. for (i = 0; i < jcps.length; i++) { 4. var ip = jcps[i]; 5. if (i == 0) { 6. console.log("本机:" + ip); // 第一条总是指本机的ip 7. } else { 8. console.log(ip); 9. } 10. } 11. } 12. }); 使用 findJCPs可以得到局域网内所有的 JCP 站点的IP列表。
有了 JCP 站点的 IP,就可以用getJCP全局方法,得到一个JCP实例,有了这个实例,就可以像本地JCP一样调用,以下取得一个IP为 192.168.1.2机子上连接的打印机列表: 1. getJCP("192.168.1.2").getPrinters(function(printers) { 2. for (i = 0; i < printers.length; i++) 3. console.log(printers[i]); 4. }) 将网页打印到 192.168.1.2上的默认打印机: 1. <script> 2. function doPrint(how) { 3. var myDoc = { 4. documents : document, 5. copyrights : '杰创软件拥有版权 www.jatools.com' 6. }; 7. 8. getJCP("192.168.1.2").print(myDoc, false); // 不弹出对话框打印 9. } 10. </script> 11. ... 12. <div id='page1'>第一页(div#page1)</div> 13. <div id='page2'>第二页(div#page2)</div>
提示: 1. 使用ip得到的JCP实例,有一个限制,就是不要使用任何需要用户交互的调用,比如,打印预览printPreview,或者选择打印机打印print(myDoc,true),否则,目标机子上弹出的交互界面,而又无人理睬,将导致调用处于卡死状态; 2. 如果不能发现站点,请检查是否开启了防火墙,如是请在控制面板中关闭; 3. 当本地打印时,实际上getJCP()取的是ip为127.0.0.1的本地JCP实例,即: 1. var jcp = getJCP("127.0.0.1"); // 等价于 getJCP() 6.5 已知打印站 IP 进行打印已知打印站 IP 进行打印 如果你有一台设备,该设备的操作系统不是Windows系列,比如,是安卓、苹果手机、MacOS、Linux设备,能否在浏览器或者webview组件中,将网页打印到 JCP 站点上?
答案是可以,方法如下: 1. <script> 2. function doPrint(how) { 3. var myDoc = { 4. documents : document, 5. copyrights : '杰创软件拥有版权 www.jatools.com' 6. }; 7. 8. getJCP("192.168.1.2").print(myDoc, false); // 将网页打印到 192.168.1.2站点上 9. } 10. </script> 11. ... 12. <div id='page1'>第一页(div#page1)</div> 13. <div id='page2'>第二页(div#page2)</div> 用法与上节所述类似。
|