在MVC2.0使用Lodop为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);
}

NET技术在MVC2.0使用Lodop为WEB打印提出完美解决方案,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。