8       云打印

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

 

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

8.1   本地打印

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

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

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

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

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

 

 

8.2   云打印-云打印机打印

云打印机打印就是将PCwindows,linux均可)上的打印机,通过注册暴露到网络(Internet/Intranet)上,以方便授权(通过访问密码验证)的用户在任何时间,任何设备中,将要打印的文档打印到该打印机上。

 

打印时,用户通过HTTP协议将打印请求通过云打印服务器转发给某台云端打印机,用户设备通过浏览器或者其他HTTP客户端,与服务端通讯,因此,该设备可以是 AndroidIOSLinux设备,且不必安装 JCP

 

云打印机模式已经被广泛使用在微信照片打印系统、餐饮订单自动打印系统、校园文档打印自助终端中。

 

云打印机打印流程如下:

ü  2.打印机工作站 1.服务器 注册自己挂接的打印机,用打印机别名和口令标识,成为云打印机,并开始监听服务端来的打印请求;

ü  1.服务器 接受注册;

ü  3.用户 准备资料,或上传文档,向1.服务器 提出打印请求,指定云打印机别名和口令,并监听服务端转发过来的打印任务状态;

ü  1.服务器 检测请求的打印机是否已注册,口令是否一致,通过则向2.工作站 转发打印请求;

ü  2.工作站 开始打印,打印结束后,向服务端发送打印任务状态;

ü  1.服务器 转发打印任务状态;

ü  3.用户 收到打印任务状态,打印结束;

 

10.2.1         将打印机注册到云端

将打印机注册到云端

1.  // 拟注册到云端的打印机         

2.  var printer = ...  

3.    

4.  // 为云打印机设置一个别名  

5.  var alias = ...  

6.    

7.  // 设置访问密码  

8.  var password = ...  

9.    

10. // 取云打印服务实例  

11. var cloud = getJCP().cloudService();  

12.   

13. // 注册  

14. cloud.register(printer, alias, password, function(result) {  

15.     if (result.error) {  

16.         alert("注册失败," + result.error);  

17.     } else {  

18.         alert("注册成功.");  

19.   

20.     }  

21. })  

要使用云打印机模式打印文档,必须先将PC(打印机工作站)上的打印机注册到云端,注册后,JCP云打印服务器才能将用户的打印请求转发到你这里来。

 

JCP使用云打印服务 cloudServiceregister 方法,来注册云打印机,其中,printer参数就是你要注册到云端的打印机,alias参数表示该云打印机的别名,每台打印机上的别名不能重名,password参数是该打印机的访问密码,用来验证用户是否被授权,最后的回调函数参数result可以指明是否注册成功。

 

提示:

1.   打印机工作站可以是windows系统,也可以是linux系统;

2.   在线演示的云打印机模式,有如下限制:

u  打印机工作站注册后,必须保持运行。如果用户发送打印命令时,工作站处于关机状态,该打印命令将被丢弃。

u  工作站重启后,以前注册的打印机信息就会失效。

u  每个工作站只能注册一台打印机。

3.   正式版用户的云打印机模式下,打印机工作站注册后将被永久保存在服务端,工作站关机期间的打印请求可以被缓存,每个工作站可以注册多个打印机。

 

10.2.2         将网页打印到挂接在云上的打印机

将网页打印到挂接在云端打印机

1.  // 准备打印页面及设置打印参数  

2.  var myDoc = {  

3.      done : function() {  

4.          alert("打印成功!");  

5.      },  

6.      documents : document, // 打印页面(div)们在本文档中  

7.      copyrights : '杰创软件拥有版权  www.jatools.com' // 版权声明必须  

8.  };  

9.    

10. // 取云打印服务实例  

11.   

12. var cloud = getJCP().cloudService();  

13.   

14. // 打印,比普通打印多了云打印机aliaspassword参数,少了是否弹打印机选择对话框打印参数  

15. // 注意,云打印不能打印预览,也不能弹打印机选择对话框  

16. cloud.print(alias, password, myDoc);  

 

你可以使用云打印服务 cloudServiceprint 方法,来打印网页文档,其中 alias password 参数就是你在注册云打印机时设置的云打印机别名和访问密码,myDoc就是打印参数,除不能设置 myDoc.settings.printer外,其他参数与 getJCP().print 方法中使用的myDoc 用法完全一致。

 

提示:

发起打印的设备不必安装JCP,可以是任何操作系统和设备,只要安装有浏览器或者其他HTTP客户端程序即可。

 

 

10.2.3         将网络上的文档,打印到云端打印机

将自己网络上的文档,打印到云端打印机将网络上的文档,打印到云端打印机

1.  // 取文档位置  

2.  var url = ...; 

3.    

4.  // 取文档类型  

5.  var type = ...;  

6.    

7.  // 取云打印服务实例  

8.  var cloud = getJCP().cloudService();          

9.    

10. // 打印,比 getJCP().printDocument 方法多了aliaspassword参数  

11. cloud.printDocument(alias, password, url, {  

12.     fileType : type,  

13.     done : function() {  

14.         alert("打印成功.");  

15.     }  

16. });  

 

你可以使用云打印服务 cloudServiceprintDocument 方法,来打印在线文档,其中 alias password 参数就是你在注册云打印机时设置的云打印机别名和访问密码,url就是文档所在网络位置。

 

第三个参数设置一些打印参数,比如起始页,纸张大小等,其中的 fileType属性是必须的参数,表示文档类型,云打印机支持的文档类型如下:

doc,docx,xls,xlsx,ppt,pptx,wps,pdf,png,jpg,gif

 

你也可以在第三个参数对象的done属性里,设置回调以监控打印结果。

 

提示:

1.发起打印的设备不必安装JCP,可以是任何操作系统和设备,只要安装有浏览器或者其他HTTP客户端程序即可;

2.使用printDocument打印网络文档,不需要在打印站上安装相应的文档查看软件,比如,MS Office,AdoberReader, WPS 等。

 

 

10.2.4         将本地文档上传,打印到云端打印机

将本地文档上传,打印到云端打印机

 

打印本地上传的文档,本质上与上例中的打印网络上的文档没有区别,只不过,需要先将文件上传,暂存到JCP打印服务器,然后,让服务器返回一个该文档的临时url,采用上例中的printDocument方法,打印出来。

 

为了方便用户上传文档到JCP 打印服务器,你可以使用cloudServicegetUploadAction方法,让云打印服务器预分配一个下载地址,再结合两个iframe来实现 AJAX 上传文档,代码如下:

 

1.  <script>  

2.      var uploaded = null;  

3.      function doPrint(how) {  

4.    

5.          // 取云打印机别名  

6.          var alias = ...  

7.    

8.          // 取访问密码  

9.          var password = ...  

10.   

11.         // 取云打印服务实例  

12.         var cloud = getJCP().cloudService();  

13.   

14.         var type = ...  

15.         var url = uploaded;  

16.   

17.         cloud.printDocument(alias, password, url, {  

18.             fileType : type,  

19.             done : function() {  

20.                 alert("打印成功.");  

21.             }  

22.         });  

23.     }  

24.   

25.     function init() {  

26.         var hiddenframe = document.getElementById('hiddenframe');  

27.         hiddenframe.onload = function() {  

28.             document.getElementById('print').disabled = false;  

29.         }  

30.         getJCP().cloudService().getUploadAction(function(action, url) {  

31.             var uploadform = document.getElementById('uploadform');  

32.             uploadform.action = action;  

33.             uploaded = url;  

34.   

35.         });  

36.     }  

37. </script>  

38. </head>  

39. <body onload="init()">  

40.     <iframe id="hiddenframe" name="hiddenframe" style="display: none"></iframe>  

41.     <form id="uploadform" target="hiddenframe" method="post" enctype="multipart/form-data">  

42.         <input id="file" class="filename" type="file" onchange="this.form.submit()" name="fileLabel">  

43.     </form>  

44.     <input id="print" type="button" disabled=true value="打印" onclick="doPrint()">  

45. </body>  

46. </html>  

 

 

8.3   云打印-服务端集中打印

 

 

服务端集中打印,就是若干客户端使用HTTP,将打印内容发送到同一打印站的打 印。与点对点打印类似,客户端不必是Windows系统,也不必安装JCP 服务端。 下面以上图为例,描述 5.移动设备 打印到 3.打印机 的流程:

ü 5.移动设备的浏览器,访问 1.HTTP服务器上引用jcp.js的页面;

ü 点击页面中的打印按钮;

ü jcp.js将打印指令发送到 2.JCP打印站

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