//192.168.1.2:
8000/CLodopfuncs.js?
name=LODOPB'>
此时调用打印时,不再用LODOP这个默认的JS变量名,而是用LODOPA或LODOPB,二者分别向不同的云主机发打印指令,LODOPA指向192.168.1.1,而LODOPB指向192.168.1.2,以此类推。
获取LODOP对象
引用以上js文件后,就可以在页面程序里通过getCLodop(注意:
如果C-Lodop与Lodop按图1搭配使用,要使用Lodopfuncs.js示中的getLodop,其中就包含了getCLodop语句的调用)函数获取主对象,赋值给一个普通JS变量,为了兼容已经开发好的打印程序,仍然统一用LODOP这个变量名:
varLODOP=getCLodop();
有了该对象之后,就可以调用云打印功能语句了,如
LODOP.PRINT();
LODOP.PREVIEW();
LODOP.PRINT_DESIGN();
更多语句参考后面的功能函数介绍。
四、功能函数
C-Lodop的功能函数几乎涵盖了Lodop的所有语句,它们的详细功能说明参考《WEB打印控件Lodop技术手册》。
除此之外,新增了部分与页面整合相关的函数和属性,还有个别语句的参数值有所扩展,详解如下:
Create_Printer_List
作用:
C-Lodop函数之一,获得云主机链接的所有打印机名单,并添加到当前页面某个Select标签元素中
格式:
Create_Printer_List(oElement);
参数:
oElement目标对象(已经存在的某个Select标签元素)
举例:
CLODOP.Create_Printer_List(document.getElementById('Select01'));
Create_PageSize_List
作用:
C-Lodop函数之一,获得目标打印机所拥有的纸张类型名单,并添加到当前页面某个Select标签对象元素中
格式:
Create_PageSize_List(oElement,iPrintIndex);
参数:
oElement目标对象(已经存在的某个Select标签元素)
iPrintIndex目标打印机在windows系统内的序号
(操作系统对所添加打印机的顺序编号,从0开始)
举例:
CLODOP.Create_PageSize_List(document.getElementById('Select03'),2);
On_Return
作用:
C-Lodop属性之一,设置那些需要返回结果的动作语句在获得结果时触发的回调函数
格式:
On_Return=function(TaskID,Value){...};
说明:
和Lodop相比,C-Lodop的动作语句不再立即返回执行结果,而是返回一个任务编号,页面程序在回调函数中通过该编号来区分是哪个语句返回的结果,并根据结果值在该回调函数中进行下一步的处理。
参数:
TaskID后续动作语句的任务编号,进一步参考后面On_Return_Remain的使用。
Value该动作语句返回的结果值,类型为逻辑真假值或字符串值。
举例:
....
LODOP.On_Return=function(TaskID,Value){
if(Value)alert("已发出实际打印命令!
");elsealert("放弃打印!
");
};
LODOP.PRINTA();//这是一个典型的动作语句
On_Return_Remain
作用:
C-Lodop属性之一,让所设置的回调函数持续保留,对后续多个动作都有效
格式:
On_Return_Remain=真假值;
说明:
正常情况下,回调函数执行完毕后会自动销毁(也就是本属性默认值是false),而本属性设置为真值就可以阻止其销毁,从而让后面的所有动作语句都触发同一个回调函数,在回调函数中用TaskID的值来区分是哪个动作触发的回调。
举例:
varTaskID1,TaskID2
LODOP.On_Return_Remain=true;
LODOP.On_Return=function(TaskID,Value){
if(TaskID==TaskID1){
alert("判断是否打印成功的结果是:
"+Value)
}elseif(TaskID==TaskID2){
alert("判断打印任务是否还存在的结果是:
"+Value)
};
};
TaskID1=LODOP.GET_VALUE("PRINT_STATUS_OK",P_ID);
TaskID2=LODOP.GET_VALUE("PRINT_STATUS_EXIST",P_ID);
On_CLodop_Opened
作用:
C-Lodop属性之一,该事件在页面websocket建立完毕并准备好时触发。
格式:
On_CLodop_Opened=function();
说明:
页面程序可以把调用打印的过程放在该事件中,避免因为过早打印造成“C-Lodop未准备好”的频繁提示,同时也能尽快打印。
事件触发正常工作之后,建议重置该属性为null。
举例:
if(needCLodop()){
window.On_CLodop_Opened=function(){
OpenPreview();//执行打印预览
window.On_CLodop_Opened=null;
};
}else
window.onload=function(){OpenPreview();};
demoCreateCLodopJSscript
名称:
C-Lodop典型例子函数之一,在当前页面动态引入C-Lodop的js文件CLodopfuncs.js,引入时清理掉此前的其它引用,从而唯一选择云主机。
格式:
demoCreateCLodopJSscript(strSrc);
参数:
strSrc参数值为目标云主机的script标签,其格式为:
//Host地址:
端口/CLodopfuncs.js'>
也可以仅是src值部分:
http:
//Host地址:
端口//CLodopfuncs.js
举例:
demoCreateCLodopJSscript("//192.168.0.8:
8000/CLodopfuncs.js'>");
或
demoCreateCLodopJSscript("http:
//192.168.0.8:
8000/CLodopfuncs.js");
与前面说的在页面能同时引用多个云主机相比,本函数的动态选择比较常见,毕竟客户输出的目标打印机往往是很明确的。
PREVIEW
作用:
打印预览语句扩展了三个参数oView,iW,iH
格式:
PREVIEW(oView,iW,iH)
功能:
以某种样式进行打印预览。
参数:
参数值及其含义
oView:
让预览窗口内含在当前页面内(而不是弹窗),这里的“内含”不同于插件“内嵌”模式,进一步的内含样式有如下几种可选:
_dialog:
弹出对话框
_blank:
新窗口
_self:
在本窗口
_top:
新窗口
_parent:
本窗口
具体ID值:
在某个现有iframe元素内(需要提前在页面内增加该iframe)
iW:
预览窗口显示时的宽度值(px);
iH:
预览窗口显示时的高度值(px);
举例:
LODOP.PREVIEW("_blank");//在新的浏览器窗口显示打印预览
(注意浏览器阻止设置对其仍然有效)
LODOP.PREVIEW("001");//在ID等于“001”的iframe元素内显示打印预览
五、升级
Lodop6205发行包里包含“install_lodop32.exe”、“install_lodop64.exe”、“CLodopPrint_Setup_for_Win32NT.exe”这3个安装文件和50个小例子及其JS文件。
文件“CLodopPrint_Setup_for_Win32NT.exe”是云打印“C-Lodop”的主安装文件,如果是配合部署需三个文件(见图1),如果单独部署只需这一个文件。
由于云打印兼容控件传统语句,所以开发者要把自己的web系统由Lodop6.1xx升级到新版本(6.2xx+云打印)还是比较容易的,升级主要步骤有三个:
第一、更新Lodopfuncs.js这个文件。
这虽说是一个js例子,但对多数人来说最好直接使用它,此前已经自行编写getLodop过程的开发者需要理解本次变化后充实改进一下。
其变化主要是增加了判断哪些浏览器调用传统控件,哪些浏览器调用C-Lodop云打印,并动态添加支持云打印的新js文件。
如果升级为全面采用云打印(不再使用控件),即单独部署C-Lodop云打印,可修改如下函数直接返回true
源代码如下(注意红色代码变化):
//====判断是否需要安装CLodop云打印服务器:
====
functionneedCLodop(){
try{
varua=navigator.userAgent;
if(ua.match(/Windows\sPhone/i)!
=null)returntrue;
if(ua.match(/iPhone|iPod/i)!
=null)returntrue;
...
...
};
returnfalse;
}catch(err){returntrue;};
};
修改后如下:
//====判断是否需要安装CLodop云打印服务器:
====
functionneedCLodop(){
try{
returntrue;
}catch(err){returntrue;};
};
第二、C-Lodop语句对字母大小写敏感,要求大写。
此前控件例子中虽然都是大写,但小写或混合也是勉强可以的,但现在不行了,必须全是大写,例如LODOP.PRINT()写成LODOP.print()是非法的。
第三、云打印语句返回结果的方式不一样,要指定回调函数。
此前控件语句本身会“同步返回结果",而新的云打印前后指令不在同一个程序进程里,所以采用“异步回调函数”,函数名叫On_Return。
这个改动涉及面稍广,但做起来也不难,参考如下举例(样例4),只需在原来(蓝色)代码前面增加这段新(红色)代码,如此以来就可以让页面程序同时兼顾老版本控件和新的云打印:
if(LODOP.CVERSION){//用CVERSION属性判断是否云打印
LODOP.On_Return=function(TaskID,Value){
if(Value)alert("已发出实际打印命令!
");elsealert("放弃打印!
");
};
LODOP.PRINTA();
return;
};
if(LODOP.PRINTA())
alert("已发出实际打印命令");
else
alert("放弃打印");
六、https调用C-Lodop
C-Lodop云打印支持https协议,需要安装特殊版本,该版本的安装和端口详情如下:
安装文件
文件名称:
CLodop_Setup_for_Win32NT_https_2.060.exe;
注意文件名称中包含https字样。
服务端口
默认情况下http服务和https服务的端口差值443,即:
http服务端口默认8000;
https服务端口默认8443;
端口8443与其他服务冲突时,自动变大。
页面引用方式举例如下:
//localhost:
8443/CLodopfuncs.js">
注意其中域名必须是localhost(不能是127.0.0.1或具体ip地址);
引用方式也可以动态添加,动态加载方法可参考第三部分“调用”。
进入https服务欢迎页
进入欢迎首页参考图2-1、2-2,如果出现如下图6-1所提示的红框,则说明C-Lodop云打印https服务已启动。
(图6-1)
安装后的运行文件
在http标准运行文件(参考第5页)基础上增加了5个文件,如下:
1.证书管理和安装:
certmgr32.exe;
2.SSL证书key:
localhost32.key;
3.SSL证书文件:
localhost32.crt;
4.https服务辅助文件:
libeay32.dll;
5.https服务辅助文件:
ssleay32.dll。
判断https服务
页面程序通过CLODOP.HTTPS_STATUS属性判断是否安装https服务:
0-没安装1-已安装2-安装且已启动。
例如:
if (CLODOP.HTTPS_STATUS==undefined || CLODOP.HTTPS_STATUS<1) {
alert("请安装C-Lodop的https服务版本(特别版本)!
");
}
七、特注
由于运行在云端,所以C-Lodop不支持预览或设计窗口的前端内嵌功能,需要这项功能的业务系统,升级时最好兼顾“控件(插件)+云打印”,以便操作者根据需要选用支持插件的浏览器。
尽管有此缺憾,但C-Lodop构思巧妙,未来前景远大,以后会发布带更多精彩功能的版本,甚至让最终用户能直接使用,满足“移动设备+Wifi+普通打印”的迫切需要。
<完>