基于MVC4+EasyUI的Web开发框架经验总结(16)--使用云打印控件C-Lodop打印页面或套打报关运单信息

简介:

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

1、控件的安装

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

这种通过服务器提供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生成内容的几种方式》。

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

该控件提供了很详细的各种案例(http://www.lodop.net/demo.html),可以参考学习使用。

在前面介绍了,我在框架里面的网购运单处理里面,继续使用了这个控件进行套打的处理,例如我们需要套打类似这样的界面内容。

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

设计好的内容,我们可以把它们转换为页面里面的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框架界面效果。

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

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

参考代码如下所示。

    @*添加对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>

以上就是基于新版云打印控件C-Lodop的使用效果和代码,希望对大家有所帮助。

本文转自博客园伍华聪的博客,原文链接:基于MVC4+EasyUI的Web开发框架经验总结(16)--使用云打印控件C-Lodop打印页面或套打报关运单信息,如需转载请自行联系原博主。



目录
相关文章
|
3月前
|
开发框架 JSON API
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
【7月更文挑战第22天】在Python Web开发中,设计高效的RESTful API涉及选择框架(如Flask或Django)、明确资源及使用HTTP方法(GET, POST, PUT, DELETE)来操作数据。响应格式通常是JSON,错误处理也很重要。示例展示了使用Flask创建图书管理API,包括版本控制、文档化、安全性和性能优化是最佳实践。这样的API使数据交互更顺畅。
81 2
|
3月前
|
设计模式 前端开发 数据库
深入理解MVC设计模式:构建高效Web应用程序的基石
【7月更文挑战第4天】在软件工程领域,设计模式是解决常见问题的一系列经过验证的方法。其中,Model-View-Controller(MVC)设计模式自诞生以来,便成为了构建用户界面,特别是Web应用程序的黄金标准。MVC通过将应用程序逻辑分离为三个核心组件,提高了代码的可维护性、可扩展性和重用性。本文将深入探讨MVC设计模式的原理,并通过一个简单的代码示例展示其应用。
71 0
|
24天前
|
前端开发 数据安全/隐私保护
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
本文档详细介绍了HTML表单的多种元素及其用法,包括下拉菜单(`&lt;select&gt;` 和 `&lt;option&gt;`)、文本域(`&lt;textarea&gt;`)、标签解释(`&lt;label&gt;`)、各类按钮(`&lt;button&gt;`)及表单重置功能、无语义布局标签(`&lt;div&gt;` 和 `&lt;span&gt;`)以及字符实体的应用。此外,还提供了一个完整的注册信息表单案例,涵盖个人信息、教育经历和工作经历等部分,展示了如何综合运用上述元素构建实用的表单。
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
|
4月前
基于EasyUI的后台管理系统页面原型_示例图_下载地址
基于EasyUI的后台管理系统页面原型_示例图_下载地址
27 0
|
1月前
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
54 7
|
1月前
|
前端开发 测试技术 开发者
MVC模式在现代Web开发中有哪些优势和局限性?
MVC模式在现代Web开发中有哪些优势和局限性?
|
2月前
|
Serverless 对象存储
现代化 Web 应用构建问题之配置Serverless Devs的秘钥信息如何解决
现代化 Web 应用构建问题之配置Serverless Devs的秘钥信息如何解决
32 1
|
2月前
|
开发者 前端开发 Java
架构模式的诗与远方:如何在MVC的田野上,用Struts 2编织Web开发的新篇章
【8月更文挑战第31天】架构模式是软件开发的核心概念,MVC(Model-View-Controller)通过清晰的分层和职责分离,成为广泛采用的模式。随着业务需求的复杂化,Struts 2框架应运而生,继承MVC优点并引入更多功能。本文探讨从MVC到Struts 2的演进,强调架构模式的重要性。MVC将应用程序分为模型、视图和控制器三部分,提高模块化和可维护性。
36 0
|
2月前
|
Java 开发者 前端开发
Struts 2、Spring MVC、Play Framework 上演巅峰之战,Web 开发的未来何去何从?
【8月更文挑战第31天】在Web应用开发中,Struts 2框架因强大功能和灵活配置备受青睐,但开发者常遇配置错误、类型转换失败、标签属性设置不当及异常处理等问题。本文通过实例解析常见难题与解决方案,如配置文件中遗漏`result`元素致页面跳转失败、日期格式不匹配需自定义转换器、`&lt;s:checkbox&gt;`标签缺少`label`属性致显示不全及Action中未捕获异常影响用户体验等,助您有效应对挑战。
67 0
|
2月前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
31 0
下一篇
无影云桌面