6       云打印

JCP有两种打印模式,本地打印,和云打印,而云打印又可分为点对点打印,和服务端集中打印。

 

本文档的前面部分,都在讲本地打印,现在我们来看看两者的区别:

6.1   本地打印

JCP 处于本地打印模式时,其作用类似传统的打印插件工具(只不过实现方式不同于插件而已),就是将浏览器中的内容,打印到与本机连接的打印机中,其打印流程如下:

ü 2.JCP打印站的浏览器,访问 1.HTTP服务器上,引用jcp.js的页面;

ü 从页面中,点击打印按钮;

ü jcp.js访问本地 JCP服务;

ü 本地JCP服务调用Win32 Print API 打印到本地打印机,3.打印机

 

6.2   云打印-点对点打印

点对点打印,就是某一设备通过浏览器,将打印内容打印到到某一与JCP打印站连 接的打印机中。该设备通过HTTP发送打印指令到JCP站,因此,可以是 AndroidIOSLinux设备,且不必安装 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()取的是ip127.0.0.1的本地JCP实例,即:

1.     var jcp = getJCP("127.0.0.1"); // 等价于 getJCP()  

6.5   已知打印站 IP 进行打印 

已知打印站 IP 进行打印

如果你有一台设备,该设备的操作系统不是Windows系列,比如,是安卓、苹果手机、MacOSLinux设备,能否在浏览器或者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>  

用法与上节所述类似。