一起谈.NET技术,在MVC2.0使用Lodop为WEB打印提出完美解决方案

简介:   通过好友CallHot介绍Lodopweb打印控件。由于是国人开发的,故这两天认真了研究下,打算在未来的项目中使用。现将学习成果与园友分享。如果存在不足的地方,希望您指出。  具体的实现步骤如下:  一、准备工作   1.MVC2.0 + jQuery1.4.1 开发环境。

  通过好友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);
}

  其中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打印请联系Lodop作者

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

目录
相关文章
|
5月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
554 1
|
4月前
|
监控 Cloud Native 测试技术
.NET技术深度解析:现代企业级开发指南
每日激励:“不要一直责怪过去的自己,他曾经站在雾里也很迷茫”。我是蒋星熠Jaxonic,一名在代码宇宙中探索的极客旅人。从.NET Framework到.NET 8,我深耕跨平台、高性能、云原生开发,践行领域驱动设计与微服务架构,用代码书写技术诗篇。分享架构演进、性能优化与AI融合前沿,助力开发者在二进制星河中逐光前行。关注我,共探技术无限可能!
.NET技术深度解析:现代企业级开发指南
|
8月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。该方案设计目标是实现通用性,适用于各种网络架构和业务场景。
256 1
|
9月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。
347 7
|
10月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
412 0
|
4月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
393 4
|
8月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
8月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。
|
8月前
|
JSON 开发框架 自然语言处理
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
本文主要介绍了应用开发中的三大核心内容:生命周期管理、资源限定与访问以及多语言支持。在生命周期部分,详细说明了应用和页面的生命周期函数及其触发时机,帮助开发者更好地掌控应用状态变化。资源限定与访问章节,则聚焦于资源限定词的定义、命名规则及匹配逻辑,并阐述了如何通过 `$r` 引用 JS 模块内的资源。最后,多语言支持部分讲解了如何通过 JSON 文件定义多语言资源,使用 `$t` 和 `$tc` 方法实现简单格式化与单复数格式化,为全球化应用提供便利。
311 104