博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一起谈.NET技术,在MVC2.0使用Lodop为WEB打印提出完美解决方案
阅读量:6716 次
发布时间:2019-06-25

本文共 3565 字,大约阅读时间需要 11 分钟。

  通过好友介绍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功能_打印表格
"
);
//
报表标题
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打印请联系。

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

转载地址:http://eekmo.baihongyu.com/

你可能感兴趣的文章
揭秘“史上最严高考”背后的高科技手段
查看>>
百分点:在线旅游阿里去啊购买转化最高
查看>>
“互联网+”改变传统教育模式
查看>>
阿里巴巴发布物联网平台:不止互动 更能互懂
查看>>
威胁情报工具:更快?更聪明?
查看>>
荷兰Serverius数据中心如何逆袭运营困境
查看>>
移动后端即服务带给我们什么?
查看>>
JS的运行机制
查看>>
PyCharm - Linux下最好的Python IDE
查看>>
NB-IoT来了!网络还差两个月启用,芯片和平台已经准备好了
查看>>
卢东:智能路由,家庭的数据中心
查看>>
智能家庭本周锋闻:小米推智能插座等四件新品,“真智能家居”?
查看>>
C#程序员经常用到的10个实用代码片段
查看>>
WebP支持:超乎你想象
查看>>
XSS与XSSI区别何在?
查看>>
Wink Hub:老牌家居商的智能中控平台
查看>>
云存储时代更好的选择,你的数据由你主宰
查看>>
快速迭代的互联网研发模式下测试如何突破?
查看>>
劫持管理员权限 赛门铁克提醒用户警惕Android勒索软件
查看>>
自家应用都不支持WP系统 微软移动策略让股东怒了
查看>>