cfprint_ext.js
11.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/**
* CFPrint打印辅助类
* ver 1.3
* 康虎软件工作室
* Email: wdmsyf@sina.com
* QQ: 360026606
* 微信: 360026606
*
* 一、用法:
* 启动康虎云打印服务器后,在应用系统中,通过服务端代码,生成打印所需要的报表数据Json字符,并命名为_reportData,即可自动打印。
* 通过重设 _delay_send 和 _delay_close 两个参数,可以调整发送打印以及打印完毕后关闭报表页面的延时时长。
*
* 其中:_reportData 可以是json对象,也可以是json字符串
*
* 二、连接状态
* cfprint.CONNECTING: 正在连接
* cfprint.OPEN: 已连接
* cfprint.CLOSING: 连接正在关闭
* cfprint.CLOSED: 连接已关闭
*
* 检测当前连接状态:
* if ( cfprint.state() === cfprint.OPEN) {...}
*/
/*
//示例数据:
var _reportData = '{"template":"waybill_huaxia3.fr3","Cols":[{"type":"str","size":255,"name":"HAWB#","required":false},{"type":"int","size":0,"name":"NO","required":false},{"type":"float","size":0,"name":"华夏单号","required":false},{"type":"integer","size":0,"name":"鹭路通单号","required":false},{"type":"str","size":255,"name":"发件人","required":false},{"type":"str","size":255,"name":"发件人地址","required":false},{"type":"str","size":255,"name":"发件人电话","required":false},{"type":"str","size":255,"name":"发货国家","required":false},{"type":"str","size":255,"name":"收件人","required":false},{"type":"str","size":255,"name":"收件人地址","required":false},{"type":"str","size":255,"name":"收件人电话","required":false},{"type":"str","size":255,"name":"收货人证件号码","required":false},{"type":"str","size":255,"name":"收货省份","required":false},{"type":"float","size":0,"name":"总计费重量","required":false},{"type":"int","size":0,"name":"总件数","required":false},{"type":"float","size":0,"name":"申报总价(CNY)","required":false},{"type":"float","size":0,"name":"申报总价(JPY)","required":false},{"type":"int","size":0,"name":"件数1","required":false},{"type":"str","size":255,"name":"品名1","required":false},{"type":"float","size":0,"name":"单价1(JPY)","required":false},{"type":"str","size":255,"name":"单位1","required":false},{"type":"float","size":0,"name":"申报总价1(CNY)","required":false},{"type":"float","size":0,"name":"申报总价1(JPY)","required":false},{"type":"int","size":0,"name":"件数2","required":false},{"type":"str","size":255,"name":"品名2","required":false},{"type":"float","size":0,"name":"单价2(JPY)","required":false},{"type":"str","size":255,"name":"单位2","required":false},{"type":"float","size":0,"name":"申报总价2(CNY)","required":false},{"type":"float","size":0,"name":"申报总价2(JPY)","required":false},{"type":"int","size":0,"name":"件数3","required":false},{"type":"str","size":255,"name":"品名3","required":false},{"type":"float","size":0,"name":"单价3(JPY)","required":false},{"type":"str","size":255,"name":"单位3","required":false},{"type":"float","size":0,"name":"申报总价3(CNY)","required":false},{"type":"float","size":0,"name":"申报总价3(JPY)","required":false},{"type":"int","size":0,"name":"件数4","required":false},{"type":"str","size":255,"name":"品名4","required":false},{"type":"float","size":0,"name":"单价4(JPY)","required":false},{"type":"str","size":255,"name":"单位4","required":false},{"type":"float","size":0,"name":"申报总价4(CNY)","required":false},{"type":"float","size":0,"name":"申报总价4(JPY)","required":false},{"type":"int","size":0,"name":"件数5","required":false},{"type":"str","size":255,"name":"品名5","required":false},{"type":"float","size":0,"name":"单价5(JPY)","required":false},{"type":"str","size":255,"name":"单位5","required":false},{"type":"float","size":0,"name":"申报总价5(CNY)","required":false},{"type":"float","size":0,"name":"申报总价5(JPY)","required":false},{"type":"str","size":255,"name":"参考号","required":false},{"type":"AutoInc","size":0,"name":"ID","required":false}],"Data":[{"鹭路通单号":730293,"发货国家":"日本","单价1(JPY)":null,"申报总价2(JPY)":null,"单价4(JPY)":null,"申报总价2(CNY)":null,"申报总价5(JPY)":null,"华夏单号":200303900791,"申报总价5(CNY)":null,"收货人证件号码":null,"申报总价1(JPY)":null,"单价3(JPY)":null,"申报总价1(CNY)":null,"申报总价4(JPY)":null,"申报总价4(CNY)":null,"收件人电话":"182-1758-8628","收件人地址":"上海市闵行区虹梅南路1660弄蔷薇八村39号502室","HAWB#":"860014010055","发件人电话":"03-3684-3676","发件人地址":" 1-1-13,Kameido,Koto-ku,Tokyo","NO":3,"ID":3,"单价2(JPY)":null,"申报总价3(JPY)":null,"单价5(JPY)":null,"申报总价3(CNY)":null,"收货省份":null,"申报总价(JPY)":null,"申报总价(CNY)":null,"总计费重量":3.20,"收件人":"张振泉2","总件数":13,"品名5":null,"品名4":null,"品名3":null,"品名2":null,"品名1":"纸尿片","参考号":null,"发件人":"NAKAGAWA SUMIRE 2","单位5":null,"单位4":null,"单位3":null,"单位2":null,"单位1":null,"件数5":null,"件数4":null,"件数3":3,"件数2":null,"件数1":10},{"鹭路通单号":730291,"发货国家":"日本","单价1(JPY)":null,"申报总价2(JPY)":null,"单价4(JPY)":null,"申报总价2(CNY)":null,"申报总价5(JPY)":null,"华夏单号":200303900789,"申报总价5(CNY)":null,"收货人证件号码":null,"申报总价1(JPY)":null,"单价3(JPY)":null,"申报总价1(CNY)":null,"申报总价4(JPY)":null,"申报总价4(CNY)":null,"收件人电话":"182-1758-8628","收件人地址":"上海市闵行区虹梅南路1660弄蔷薇八村39号502室","HAWB#":"860014010035","发件人电话":"03-3684-3676","发件人地址":" 1-1-13,Kameido,Koto-ku,Tokyo","NO":1,"ID":1,"单价2(JPY)":null,"申报总价3(JPY)":null,"单价5(JPY)":null,"申报总价3(CNY)":null,"收货省份":null,"申报总价(JPY)":null,"申报总价(CNY)":null,"总计费重量":3.20,"收件人":"张振泉","总件数":13,"品名5":null,"品名4":null,"品名3":null,"品名2":null,"品名1":"纸尿片","参考号":null,"发件人":"NAKAGAWA SUMIRE","单位5":null,"单位4":null,"单位3":null,"单位2":null,"单位1":null,"件数5":null,"件数4":null,"件数3":3,"件数2":null,"件数1":10},{"鹭路通单号":730292,"发货国家":"日本","单价1(JPY)":null,"申报总价2(JPY)":null,"单价4(JPY)":null,"申报总价2(CNY)":null,"申报总价5(JPY)":null,"华夏单号":200303900790,"申报总价5(CNY)":null,"收货人证件号码":null,"申报总价1(JPY)":null,"单价3(JPY)":null,"申报总价1(CNY)":null,"申报总价4(JPY)":null,"申报总价4(CNY)":null,"收件人电话":"182-1758-8628","收件人地址":"上海市闵行区虹梅南路1660弄蔷薇八村39号502室","HAWB#":"860014010045","发件人电话":"03-3684-3676","发件人地址":" 1-1-13,Kameido,Koto-ku,Tokyo","NO":2,"ID":2,"单价2(JPY)":null,"申报总价3(JPY)":null,"单价5(JPY)":null,"申报总价3(CNY)":null,"收货省份":null,"申报总价(JPY)":null,"申报总价(CNY)":null,"总计费重量":3.20,"收件人":"张振泉1","总件数":13,"品名5":null,"品名4":null,"品名3":null,"品名2":null,"品名1":"纸尿片","参考号":null,"发件人":"NAKAGAWA SUMIRE 1","单位5":null,"单位4":null,"单位3":null,"单位2":null,"单位1":null,"件数5":null,"件数4":null,"件数3":3,"件数2":null,"件数1":10}]}';
*/
var _reportData = _reportData || '';
var _delay_send = 1000; //发送打印服务器前延时时长,-1表示不自动发送
var _delay_close = 1000; //打印完成后关闭窗口的延时时长, -1则表示不关闭
var cfprint_addr = "127.0.0.1"; //打印服务器的地址
var cfprint_port = 54321; //打印服务器监听端口
var cfprint = null;
//设置对象并连接打印服务器
//如果这个方法不能满足需要,您可以参考该方法自定义
function setup(){
cfprint = new ws(cfprint_addr, cfprint_port, {
automaticOpen: false, //是否自动连接标志(true|false),默认为true
reconnectDecay: 1.5, //自动重连延迟重连速度,数字,默认为1.5
output:"output", //指定调试输出div
protocols:"ws" //指定通讯协议(ws|wss),默认为"ws"
});
cfprint.onconnecting = function(evn){
cfprint.log('正与服务器建立连接...', evn);
}
cfprint.onopen = function(evn){
cfprint.log('与服务器连接成功。', evn);
}
cfprint.onclose = function(evn){
cfprint.log('与打印服务器的连接已关闭', evn);
}
/**
* 接收到打印服务器消息
* 通过该事件,可以获取到打印是否成功
* 参数:
* evn: 包含服务器返回信息的事件对象
* evn.data: 服务器返回的信息,是一个json字符串,其中:
*/
cfprint.onmessage = function(evn){
cfprint.log('收到消息!"'+evn.data+'"', evn);
var resp = JSON && JSON.parse(evn.data) || $.parseJSON(evn.data); //解析服务器返回数据
if(resp.result == 1){
if(_delay_close>0)
setTimeout(function(){open(location, '_self').close();}, _delay_close); //延时后关闭报表窗口
}else{
alert("Print failed: "+resp.message);
}
}
/**
* 捕获到错误事件
* 通过该事件在出错时可以判断出错原因
* 参数:
* evn: 包含错误信息的事件对象
* evn.detail: 是包含错误明细的对象
* evn.detail.message:是错误信息
*/
cfprint.onerror = function(evn){
if(typeof(evn.detail)==="object"){
if(typeof(evn.detail.message)==="string")
cfprint.log('遇到一个错误: '+evn.detail.message, evn);
if(typeof(evn.detail.data)==="string")
cfprint.log('遇到一个错误: '+evn.detail.message, evn);
}
else if(typeof(evn.data)==="string")
cfprint.log('遇到一个错误: '+evn.data, evn);
else
cfprint.log('遇到一个错误', evn);
}
//cfprint.open(); //连接到打印服务器,automaticOpen=false时需要这一行
}
/**
* 发送打印数据到打印服务器
* 参数:
* str: 发送给打印服务器的数据,支持json字符串和json对象
*/
function sendMsg (json) {
var _send = function(_msg){
cfprint.log("SENT: <br/>" + _msg);
cfprint.log('正在发送消息...');
cfprint.send(_msg);
}
if(!cfprint) setup();
if(cfprint.state()!==cfprint.OPEN) {
cfprint.log("连接已断开,正在重新连接。");
//setup();
cfprint.onopen = function(evn){
cfprint.log('与服务器连接成功。', evn);
_send(json);
}
cfprint.open();
}else{
_send(json);
}
}
/*******************************/
//以下是自动打印的代码,如果不是自动打印则不需要
/*无JS框架调用示例
var __doPrint = function(){
//初始化cfprint对象
setup();
//打开连接
cfprint.open(); //连接到打印服务器,automaticOpen=false时需要这一行
if(typeof(_reportData) != "undefined" && _reportData != ""){
if(_delay_send>0){
setTimeout(function () {
sendMsg(_reportData);
}, _delay_send);
}
}else {
cfprint.log("要打印的报表内容为空,取消打印。");
}
}
if (window.addEventListener)
window.addEventListener("load", __doPrint, false);
else if (window.attachEvent)
window.attachEvent("onload", __doPrint);
else window.onload = __doPrint;
*/
/*******无JS框架调用示例结束**********/
/** JQuery 调用示例 **/
jQuery(document).ready(function(){
//初始化cfprint对象
setup();
//打开连接
cfprint.open(); //连接到打印服务器,automaticOpen=false时需要这一行
if(typeof(_reportData) != "undefined" && _reportData != ""){
setTimeout(function () {
sendMsg(_reportData);
}, _delay_send);
}else {
cfprint.log("要打印的报表内容为空,取消打印。");
}
});