基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息


Posted in Javascript onAugust 29, 2016

在最新的MVC4+EasyUI的Web开发框架里面,我整合了关于网购运单处理的一个模块,其中整合了客户导单、运单合并、到货扫描、扣仓、出仓、查询等各个模块的操作,里面涉及到一些运单套打的操作,不过由于之前介绍LODOP不兼容Chrome等浏览器,因此曾经想放弃这个控件的打印处理,不过他们及时推出了“云打印控件C-Lodop“,而且对之前的接口几乎完全兼容,因此在框架里也继续沿用了这个控件来进行相关的打印处理,包括常规的打印和运单信息套打等处理。

1、控件的安装

这个云控件C-Lodop(http://www.lodop.net/)其实是在本地安装后,驻留服务提供JS的服务的,安装后启动程序后界面如下所示。

基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息

这种通过服务器提供JS服务的方式,比插件方式好很多,测试过Chrome浏览器也可以顺利打印了,原来的LODOP插件方式的打印是不兼容的。

通过它们本身自带的JS初始化代码,可以了解到该控件目前采用非插件方式进行处理打印操作的了。

//让其它电脑的浏览器通过本机打印(适用例子):
var oscript = document.createElement("script");
oscript.src = "/CLodopfuncs.js";
var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
head.insertBefore(oscript, head.firstChild);
//让本机浏览器打印(更优先):
oscript = document.createElement("script");
oscript.src = "http://localhost:8000/CLodopfuncs.js?priority=1";
var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
head.insertBefore(oscript, head.firstChild);
//本机浏览器的后补端口8001(这种兼顾做法可能报错不用理它):
oscript = document.createElement("script");
oscript.src = "http://localhost:8001/CLodopfuncs.js?priority=2";
var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
head.insertBefore(oscript, head.firstChild);

官方例子提供了LodopFuncs.js文件用来构建打印控件的,其中在LodopFuncs.js文件里面定义了getLodop函数,用来获得打印控件对象的。

检查是否安装了云打印控件的JS代码如下所示。

<script language="javascript" type="text/javascript"> 
function CheckIsInstall() { 
try{ 
var LODOP=getLodop(); 
if (LODOP.VERSION) {
if (LODOP.CVERSION)
alert("当前有C-Lodop云打印可用!\n C-Lodop版本:"+LODOP.CVERSION+"(内含Lodop"+LODOP.VERSION+")"); 
else
alert("本机已成功安装了Lodop控件!\n 版本号:"+LODOP.VERSION); 
};
}catch(err){ 
} 
}; 
</script>

2、云打印控件C-Lodop的使用

这个控件和原来的LODOP的使用保持一致性,不用修改原来的代码就可以直接使用最新的打印方式,非常赞,关于这个控件的使用,我在前面介绍了很多相关的使用过程。

如在Winform里面利用网页套打证件的案例《基于NVelocity的几种内容生成方式汇总》。

基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息

以及在Web页面的套打处理《Web打印解决方案之证件套打的实现思路》,以及《Web打印的解决方案之普通报表打印》,里面对控件的使用操作做了很详细的介绍。

基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息

基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息

该控件提供了很详细的各种案例(http://www.lodop.net/demo.html),可以参考学习使用。
在前面介绍了,我在框架里面的网购运单处理里面,继续使用了这个控件进行套打的处理,例如我们需要套打类似这样的界面内容。

基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息

我们设计好套打页面内容,如下所示。

基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息

设计好的内容,我们可以把它们转换为页面里面的JS代码如下所示。

<script src="/Content/JQueryTools/LODOP/CheckActivX.js"></script>
<script type="text/javascript">
var LODOP; //声明为全局变量 
function Preview() {//打印预览
LODOP = getLodop();
LODOP.PRINT_INITA(-1, -1, 824, 1129, "运单套打");
CreateLicenseData();
LODOP.SET_PREVIEW_WINDOW(2, 0, 0, 800, 600, "");
LODOP.SET_PRINT_PAGESIZE(1, 0, 0, "A4");
LODOP.PREVIEW();
};
function Setup() {//打印维护
LODOP = getLodop();
LODOP.PRINT_INITA(-1, -1, 824, 1129, "运单套打");
CreateLicenseData();
LODOP.PRINT_SETUP();
};
function Design() {//打印设计
LODOP = getLodop();
LODOP.PRINT_INITA(-1, -1, 824, 1129, "运单套打");
CreateLicenseData();
LODOP.PRINT_DESIGN();
};
function CreateLicenseData() { 
if (printID != undefined && printID != '') {
//使用同步方式,使得联动的控件正常显示
$.ajaxSettings.async = false;
//首先用户发送一个异步请求去后台实现方法
$.getJSON("/BillDetail/FindByID?id=" + printID, function (info) {
LODOP.ADD_PRINT_SETUP_BKIMG("<img src='/Content/Template/空白套打模板.png'/>");
LODOP.SET_SHOW_MODE("BKIMG_IN_PREVIEW", true);//预览包含背景
LODOP.SET_SHOW_MODE("BKIMG_PRINT", true);//打印内容包含背景
LODOP.ADD_PRINT_BARCODE(78, 441, 262, 56, "128C", info.FenyunDanhao);
LODOP.ADD_PRINT_BARCODE(684, 441, 262, 56, "128C", info.FenyunDanhao);
LODOP.ADD_PRINT_TEXT(186, 287, 277, 39, info.Shou_Com);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(236, 378, 186, 28, info.Shou_Name);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(276, 283, 284, 67, info.Shou_Dizhi);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(362, 306, 254, 30, info.Shou_Phone);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(404, 319, 51, 30, info.Jianshu);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(400, 476, 95, 31, info.Zhongliang);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(187, 33, 227, 39, info.Fa_Gongsi);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(277, 33, 230, 65, info.Fa_Dizhi);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(364, 37, 227, 25, info.Fa_Phone);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(410, 37, 226, 26, info.Pinming);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(803, 34, 234, 39, info.Fa_Gongsi);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(895, 32, 238, 66, info.Fa_Dizhi);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(979, 33, 234, 25, info.Fa_Phone);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(1024, 35, 228, 25, info.Pinming);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(802, 285, 287, 39, info.Shou_Com);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(849, 373, 198, 28, info.Shou_Name);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(894, 285, 287, 67, info.Shou_Dizhi);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(980, 287, 281, 26, info.Shou_Phone);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(1021, 317, 59, 29, info.Jianshu);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
LODOP.ADD_PRINT_TEXT(1017, 477, 95, 30, info.Zhongliang);
LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
});
}
}
//打印预览
var printID;
function PrintDetail() {
var row = $("#gridDetail").datagrid("getSelected");
if (row) {
var index = $('#gridDetail').datagrid('getRowIndex', row);
printID = row.ID;
Preview();
}
else {
$.messager.alert("提示", "请选择一个记录");
}
}
//批量打印
function BatchPrint() {
//得到用户选择的数据的ID
var rows = $("#gridDetail").datagrid("getSelections");
if (rows.length >= 1) {
//然后确认发送异步请求的信息到后台删除数据
$.messager.confirm("批量打印确认", "您确认批量打印选定的记录吗?", function (action) {
if (action) {
for (var i = 0; i < rows.length; i++) {
LODOP = getLodop();
LODOP.PRINT_INIT("");
LODOP.SET_PRINT_PAGESIZE(1, 0, 0, "A4");
printID = rows[i].ID;
CreateLicenseData();
LODOP.PRINT();
}
}
});
}
else {
$.messager.alert("提示", "请选择你要批量打印的数据");
}
}
//打印维护
function PrintSetup() {
var row = $("#gridDetail").datagrid("getSelected");
if (row) {
var index = $('#gridDetail').datagrid('getRowIndex', row);
printID = row.ID;
Setup();
}
}
</script>

其中这个打印界面中,还用到了二维码的打印处理操作,这样很方便直接使用条码枪直接读取,如下代码:

LODOP.ADD_PRINT_BARCODE(78, 441, 262, 56, "128C", info.FenyunDanhao);
LODOP.ADD_PRINT_BARCODE(684, 441, 262, 56, "128C", info.FenyunDanhao);

然后在主页面里面设定打印的操作功能按钮进行处理,下面是我们基于EasyUI的Web框架界面效果。

基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息

打印预览界面如下所示,实际打印的时候,我们可以设定不打印背景图片。

基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息

如果是常规打印,那么他们的界面和我们看到的页面内容非常接近,如下所示。

基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息

参考代码如下所示。

@*添加对LODOP控件的支持*@
<script type="text/javascript">
var LODOP; //声明为全局变量 
function Preview() {//正本打印
CreateLicenseData();
LODOP.SET_SHOW_MODE("PREVIEW_IN_BROWSE", 1);
LODOP.PREVIEW();
};
function PrintA() {
CreateLicenseData();
LODOP.PRINTA();
};
function Setup() {//正本打印维护
CreateLicenseData();
LODOP.PRINT_SETUP();
};
function Design() {//正本打印设计
CreateLicenseData();
LODOP.PRINT_DESIGN();
};
function CreateLicenseData() {
LODOP = getLodop();
LODOP.PRINT_INIT("政策法规");
var strBodyStyle = "<link type='text/css' rel='stylesheet' href='/Content/Themes/Default/style.css' /><style><!--table { border:1;background-color: #CBCBCC } td {background-color:#FFFFFE;border: 1; } th { background-color:#F1F1F3;padding-left:5px;border:1}--></style>";
var strFormHtml = strBodyStyle + "<body>" + document.getElementById("printContent").innerHTML + "</body>";
LODOP.ADD_PRINT_HTM(20, 40, 610, 900, strFormHtml);
LODOP.PREVIEW();
}
function SaveAs() {
var id = $('#ID2').val();
window.open('/Information/ExportWordById?id=' + id );
}
</script>
Javascript 相关文章推荐
动态加载js文件 document.createElement
Oct 14 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
Mar 03 Javascript
javascript日期验证之输入日期大于等于当前日期
Dec 13 Javascript
jQuery实现的简单悬浮层功能完整实例
Jan 23 Javascript
Javascript同时声明一连串(多个)变量的方法
Jan 23 Javascript
Bootstrap面板(Panels)的简单实现代码
Mar 17 Javascript
JavaScript中的return布尔值的用法和原理解析
Aug 14 Javascript
ionic选择多张图片上传的示例代码
Oct 10 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
Nov 12 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
Feb 22 Javascript
使用webpack搭建vue环境的教程详解
Dec 31 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
Jan 20 Javascript
jquery根据一个值来选中select下的option实例代码
Aug 29 #Javascript
JQuery动态添加Select的Option元素实现方法
Aug 29 #Javascript
javascript如何创建对象
Aug 29 #Javascript
关于jquery中动态增加select,事件无效的快速解决方法
Aug 29 #Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
Aug 29 #Javascript
学习掌握JavaScript中this的使用技巧
Aug 29 #Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
Aug 29 #Javascript
You might like
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
深入剖析PHP中printf()函数格式化使用
2016/05/23 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
Python模拟登录12306的方法
2014/12/30 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
公司前台接待岗位职责
2013/12/03 职场文书
文明礼仪标语
2014/06/13 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
我的中国梦主题班会
2015/08/14 职场文书
小学校园广播稿
2015/08/18 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技