zoukankan      html  css  js  c++  java
  • 在MVC2.0使用Lo“.NET研究”dop为WEB打印提出完美解决方案 狼人:

      通过好友CallHot介绍Lodopweb打印控件。由于是国人开发的,故这两天认真了研究下,打算在未来的项目中使用。现将学习成果与园友分享。如果存在不足的地方,希望您指出。

      具体的实现步骤如下:

      一、准备工作

       1.MVC2.0 + jQuery1.4.1 开发环境。

      2.Lodop web 打印控件,官方地上海闵行企业网站设计与制作址:http://mtsoftware.v053.gokao.net/download.html  (注:国人开发,免费软件)。

      3.StringTemplate,C#开源模板引擎。官方地址:http://www.stringtemplate.org。

      本文主要给出WEB下打印步骤实现方案,具体的技术实现细节,请查看官方API。lodop,stringtemplate 官方已给出了详尽的文档说明。

      二、MVC2.0使用StringTemplate构造打印模板

      StringTemplate 文中简称st。网络上有相关文档介绍st效率还不错。本文将st作为报表打印模板。在实际项目开发中将繁杂的报表打印工作内容,部分分配给美工来处理。而开发人员只需提供数据源接口。使用st可以减轻开发人员的工作量。并将报表开发任务分工更细致。给项目带来的好处就不多论了。具体实现如下:

      1.在MVC2.0项目中引用st核心dll:

      2.建立st的模板文件,template.st(st模板专用文件):

      也可以认为st文件就是一个普通的html文件。该部分主要由美工负责处理,比如CSS。

      3.在MVC2.0 controller 内建立提供数据源的 JsonResult:

    public JsonResult Print()
    {
    //构造打印数据
    List<CustomerTest> list = new List<CustomerTest>();
    for (int i = 0; i < 100; i++)
    {
    list.Add(
    上海企业网站制作>new CustomerTest { CustomerName = "candy" + i, CustomerAddress = "思明区" + i, CustomerPhone = "13148484855" + i });
    list.Add(
    new CustomerTest { CustomerName = "linda" + i, CustomerAddress = "湖里区" + i, CustomerPhone = "13847487545" + i });
    list.Add(
    new CustomerTest { CustomerName = "ellie" + i, CustomerAddress = "海昌区" + i, CustomerPhone = "1359984665" + i });
    }

    //StringTemplate 打印模板文件,实际项目中为提高程序效率,应将打印模板文件缓存。
    string serverPath = System.Web.HttpContext.Current.Server.MapPath("~");
    string path = Path.Combine(serverPath, @"PrintTemplate\");

    StringTemplateGroup group
    = new StringTemplateGroup("myGroup", path, typeof(TemplateLexer));
    StringTemplate st
    = group.GetInstanceOf("template");
    st.SetAttribute(
    "customer", list);

    //为打印提供html相关超文本内容。
    StringBuilder sb = new StringBuilder();
    sb.Append(
    @"<html xmlns='http://www.w3.org/1999/xhtml' lang='zh-CN'>");
    sb.Append(
    "<head>");
    sb.Append(
    @"<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />");
    sb.Append(
    @"<meta http-equiv='Content-Language' content='zh-CN' />");
    string cssContent = System.IO.File.ReadAllText(Path.Combine(serverPath, @"Content\CSS\CSSForPrint.css"));
    sb.Append(
    @"<style type='text/css'>");
    sb.Append(cssContent);
    sb.Append(
    @"</style>");
    sb.Append(
    "</head>");
    sb.Append(
    "<body>");
    sb.Append(st.ToString());
    sb.Append(
    " ");
    sb.Append(
    "</body>");
    sb.Append(
    "</html>");

    return Json(new { success = true, data = sb.ToString() }, JsonRequestBehavior.AllowGet);
    }

      其中CustomerTest是自定义数据类,已经给出详细的注释了。仔细阅读不难理解。

      4.MVC2.0 view html head 内加入js 代码:

    <asp:Content ID="Content3" ContentPlaceHolderID="Head" runat="server">
    <script language="javascript" src="CheckActivX.js"></script>
    <object id="LODOP" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width="0"
    height
    ="0">
    </object>
    <script type="text/javascript">
    上海闵行企业网站制作>
    function prn1_preview(data) {
    LODOP.PRINT_INIT(
    "打印控件功能演示_Lodop功能_打印表格上海网站建设style="color: #000000;">");
    //报表标题
    LODOP.ADD_PRINT_HTM(50, 300, 330, 300,
    "<font color ='black' size ='6'>客户列表</font><font color ='blue' size ='2'>(制表人:张三)</font>");
    //报表内容打印。
    LODOP.ADD_PRINT_TABLE(100, 150, 760, 900, data);
    LODOP.PREVIEW();
    };

    $(
    function () {
    $(
    "#btnPrint").click(function () {
    var url = '<%=Url.Action("Print","Home") %>';
    $.ajax({
    type:
    "POST",
    url: url,
    cache:
    false,
    dataType:
    'json',
    success:
    function (result) {
    if (result.success) {
    prn1_preview(result.data);
    }
    }
    });
    });
    })
    </script>
    </asp:Content>

      三、运行截图

      最后一页打印预览:

      打印机横向打印:

    上海徐汇企业网站设计与制作c="http://pic002.cnblogs.com/images/2010/102419/2010122616182939.png" alt="" width="660" />

      四、注意事项

       本文给出的web打印方案需要读者对MVC2.0 、jQuery 、StringTemplate 有一定的了解。另外本例只是在IE下实现了WEB打印,如果需要Firefox或其他浏览器下支持web打印请联系Lodop作者

      希望本篇文章可以给您带来帮助,如有不足之处欢迎指出,谢谢!

    声明:此博有部分内容为转载,版权归原作者所有~
  • 相关阅读:
    JMeter参数化及断言的使用
    JMeter基础概念
    postman关联
    postman参数化
    postman发送请求的简单操作
    postman的简单介绍及运用
    javascript小记五则:用JS写一个图片左右自由滚动的“跑马灯”效果
    javascript小记四则:用JS写一个滚动横条文字,可以根据需要进行修改;
    javascript小记三则:ASP.NET启动web调试,窗体自动放大的方法
    JavaScript小记二则:接上一节:用.net写Textbox控件关于数字的判断的另一则方法
  • 原文地址:https://www.cnblogs.com/waw/p/2216996.html
Copyright © 2011-2022 走看看