[转载]在MVC2.0使用Lodop为WEB打印提出完美解决方案 – RyanDing – 博客园.
通过好友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:
01 |
public JsonResult Print() |
04 |
List<CustomerTest> list = new List<CustomerTest>(); |
05 |
for ( int i = 0; i < 100; i++) |
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 }); |
13 |
string serverPath = System.Web.HttpContext.Current.Server.MapPath( "~" ); |
14 |
string path = Path.Combine(serverPath, @"PrintTemplate\" ); |
16 |
StringTemplateGroup group = new StringTemplateGroup( "myGroup" , path, typeof (TemplateLexer)); |
17 |
StringTemplate st = group.GetInstanceOf( "template" ); |
18 |
st.SetAttribute( "customer" , list); |
21 |
StringBuilder sb = new StringBuilder(); |
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>" ); |
32 |
sb.Append(st.ToString()); |
37 |
return Json( new { success = true , data = sb.ToString() }, JsonRequestBehavior.AllowGet); |
其中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" |
08 |
function prn1_preview(data) { |
09 |
LODOP.PRINT_INIT( "打印控件功能演示_Lodop功能_打印表格" ); |
11 |
LODOP.ADD_PRINT_HTM(50, 300, 330, 300, |
12 |
"<font color ='black' size ='6'>客户列表</font><font color ='blue' size ='2'>(制表人:张三)</font>" ); |
14 |
LODOP.ADD_PRINT_TABLE(100, 150, 760, 900, data); |
19 |
$( "#btnPrint" ).click( function () { |
20 |
var url = '<%=Url.Action("Print","Home") %>' ; |
26 |
success: function (result) { |
28 |
prn1_preview(result.data); |
三、运行截图
最后一页打印预览:
打印机横向打印:
四、注意事项
本文给出的web打印方案需要读者对MVC2.0 、JQuery 、StringTemplate 有一定的了解。另外本例只是在IE下实现了WEB打印,如果需要Firefox或其他浏览器下支持web打印请联系Lodop作者。
希望本篇文章可以给您带来帮助,如有不足之处欢迎指出,谢谢!