一起谈.NET技术,在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:
{
//构造打印数据
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 代码:
<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功能_打印表格");
//报表标题
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>
三、运行截图
最后一页打印预览:
打印机横向打印:
四、注意事项
本文给出的web打印方案需要读者对MVC2.0 、jQuery 、StringTemplate 有一定的了解。另外本例只是在IE下实现了WEB打印,如果需要Firefox或其他浏览器下支持web打印请联系Lodop作者。
希望本篇文章可以给您带来帮助,如有不足之处欢迎指出,谢谢!
一起谈.NET技术,在MVC2.0使用Lodop为WEB打印提出完美解决方案相关推荐
- Asp.net MVC2.0系列文章-运行Web MVC2.0 Demo
安装VS2010 首先安装VS2010,安装过程请参考文章: http://www.cnblogs.com/ywqu/archive/2010/01/27/1657450.html. 创建第一个MVC ...
- 通过 pip 安装软件时提示 0.1.36ubuntu1,0.23ubuntu1 is an invalid version 的完美解决方案。
通过 pip 安装软件时提示 0.1.36ubuntu1,0.23ubuntu1 is an invalid version and will not be supported in a future ...
- 一起谈.NET技术,NHibernate3.0剖析:Query篇之NHibernate.Linq标准查询
系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种 ...
- 一起谈.NET技术,.NET4.0 之 Dynamic VS Reflection 效率
在我先前的文章中,不断的推广.NET4.0新特性.特别是.NET4.0 Dynamic 这个新特性.随之而来的问题也出现了-Dynamic 执行效率如何? 我们做开发的不光需要代码简洁,能够希望自己能 ...
- 一起谈.NET技术,也玩MVC3.0 Razor自定义视图引擎来修改默认的Views目录结构
刚刚爱上MVC3.0,几个不眠夜的学习越来越有趣.今天随手尝试自定义Mvc3.0的视图引擎,虽然已成功,但是还发现有点小疑问.随手贴出来希望大家指教指教. MVC的视图文件目录被固定/Views目录内 ...
- 一起谈.NET技术,专访微软MVP衣明志:走进ASP.NET MVC 2框架开发
日前微软已经发布ASP.NET MVC 2框架RC版,究竟这次RC版本的发布对于WEB开发者带来怎样的改变?以及未来ASP.NET MVC 2正式版还会有哪些改进?带着这样的问题,我们51CTO记者彭 ...
- Asp.Net MVC2.0 Url 路由入门---实例篇
本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...
- Asp.net MVC2.0系列文章-MVC简介篇
使用微软VS工具开发Web应用程序主要有两种方式:一种是常用的创建Asp.net Web Forms,另外一种就是今天着重介绍的Asp.net MVC. <?XML:NAMESPACE PRE ...
- 浅谈Hybrid技术的设计与实现【转】
https://www.cnblogs.com/yexiaochai/p/4921635.html 前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术 ...
最新文章
- (剑指Offer)面试题61:按之字形顺序打印二叉树
- DD_belatedPNG
- cocos2dx 3.x(屏幕截图的两种方法)
- asp.net core新特性(1):TagHelper
- 使用Druid数据库连接池整合MyBatis Plus时,出现Error attempting to get column 'startTime' from result set. 类似错误
- matlab 多项式提取,matlab提取多项式系数
- 批量部署windows和linux系统,使用Cobbler批量部署Linux和Windows:Windows系统批量安装(三)...
- 配色教程,学习RGB配色,最简单的配色基础。
- 使用HEVC官方编码器HM
- uni-app 实现简单登录注册demo
- 五一就要到了,我用Python制作一款钉钉低价机票提示器!
- Js获取中国农历,用于确定非固定的农历节假日
- excel查重技巧:如何用组合函数快速统计重复数据(上)
- 生活中什么因素会诱发滑膜炎?
- java保存cookie在本地_Java保存Cookie
- android 严振杰权限管理,MyAndroidFrameWork
- QT信号槽与connect的常见写法
- 代码整洁之道(上篇)
- TCL 语言——12 条语法和语义规则
- kettle 大数据整合(三)
热门文章
- thinkphp框架起步认识
- NLP复习资料(2)-三~五章:形式语言、语料库、语言模型
- linux中网页播放音乐,Linux_在Linux系统下播放网页中的背景音乐技巧,在Linux中的firefox浏览许多网页 - phpStudy...
- Ubuntu配置IPFS的环境
- sqliteorm的sync_schema介绍
- 启动linux的rpc服务的命令
- 深入理解Solidity
- 安卓布局参数类LayoutParams
- 如何吸引财富呢?请做这六件事吧!
- Springboot 项目中过滤器的使用