位置:海鸟网 > IT > ASP.NET >

在MVC2.0使用Lodop为WEB打印解决方案

在MVC2.0使用Lodop为WEB打印具体的实现步骤如下:    

一、准备工作

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

        2.Lodop web 打印控件,官方地址:  (注:国人开发,免费软件)。

        3.StringTemplate,C#开源模板引擎。官方地址:。

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

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

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

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

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

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

01 public JsonResult Print()

02        {

03            //构造打印数据

04            List<CustomerTest> list = new List<CustomerTest>();

05            for (int i = 0; i < 100; i++)

06            {

07                list.Add(new CustomerTest { CustomerName = "candy" + i, CustomerAddress = "思明区" + i, CustomerPhone = "13148484855" + i });

08                list.Add(new CustomerTest { CustomerName = "linda" + i, CustomerAddress = "湖里区" + i, CustomerPhone = "13847487545" + i });

09                list.Add(new CustomerTest { CustomerName = "ellie" + i, CustomerAddress = "海昌区" + i, CustomerPhone = "1359984665" + i });

10            }

11  

12            //StringTemplate 打印模板文件,实际项目中为提高程序效率,应将打印模板文件缓存。

13            string serverPath = System.Web.HttpContext.Current.Server.MapPath("~");

14            string path = Path.Combine(serverPath, @"PrintTemplate\");

15  

16            StringTemplateGroup group = new StringTemplateGroup("myGroup", path, typeof(TemplateLexer));

17            StringTemplate st = group.GetInstanceOf("template");

18            st.SetAttribute("customer", list);

19  

20            //为打印提供html相关超文本内容。

21            StringBuilder sb = new StringBuilder();

22            sb.Append(@"<html xmlns='http://www.w3.org/1999/xhtml' lang='zh-CN'>");

23            sb.Append("<head>");

24            sb.Append(@"<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />");

25            sb.Append(@"<meta http-equiv='Content-Language' content='zh-CN' />");

26            string cssContent = System.IO.File.ReadAllText(Path.Combine(serverPath, @"Content\CSS\CSSForPrint.css"));

27            sb.Append(@"<style type='text/css'>");

28            sb.Append(cssContent);

29            sb.Append(@"</style>");

30            sb.Append("</head>");

31            sb.Append("<body>");

32            sb.Append(st.ToString());

33            sb.Append(" ");

34            sb.Append("</body>");

35            sb.Append("</html>");

36  

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

38        }

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

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

01 <asp:Content ID="Content3" ContentPlaceHolderID="Head" runat="server">

02     <script language="javascript" src="CheckActivX.js"></script>

03     <object id="LODOP" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width="0"

04         height="0">

05     </object>

06     <script type="text/">

07   

08         function prn1_preview(data) {

09             LODOP.PRINT_INIT("打印控件功能演示_Lodop功能_打印表格");

10             //报表标题

11             LODOP.ADD_PRINT_HTM(50, 300, 330, 300,

12                       "<font color ='black' size ='6'>客户列表</font><font color ='blue' size ='2'>(制表人:张三)</font>");

13             //报表内容打印。

14             LODOP.ADD_PRINT_TABLE(100, 150, 760, 900, data);

15             LODOP.PREVIEW();

16         };

17   

18         $(function () {

19             $("#btnPrint").click(function () {

20                 var url = '<%=Url.Action("Print","Home") %>';

21                 $.({

22                     type: "POST",

23                     url: url,

24                     cache: false,

25                     dataType: 'json',

26                     success: function (result) {

27                         if (result.success) {

28                             prn1_preview(result.data);

29                         }

30                     }

31                 });

32             });

33         })

34     </script>

35 </asp:Content>

  

    三、运行截图

    四、注意事项

     本文给出的web打印方案需要读者对MVC2.0 、jQuery 、StringTemplate 有一定的了解。另外本例只是在IE下实现了WEB打印,

由于排版原因配图显示可能不完整,请右键点击图片属性查看完整图片地址,给您造成的不便请您理解!