java打印框架_WEB打印-Java架构师必看

java打印框架_WEB打印-Java架构师必看
⽂/谢康  做Web开发的⼈员⼀定都会⾯临⼀个共同的难题,那就是打印。的确,相对于Windows桌JavaScript
⽂/谢康
做Web开发的⼈员⼀定都会⾯临⼀个共同的难题,那就是打印。的确,相对于Windows桌⾯应⽤程序来讲,Web应⽤程序的打印有种种限制,技术⼈员在项⽬开发过程中经常会遇到⽤户这样或那样的需求. 做过桌⾯应⽤开发的⼈都会⾮常熟悉⽔晶报表、Active Report之类的报表控件,它们不仅有简单灵活的设计界⾯,更具有⾮常强⼤的报表功能,能满⾜各种报表的打印需求。⽽Web应⽤则因为其特殊的呈现⽅式,只能寻求其他的解决⽅案。现在我们来分析⼀下⽬前已经成形的Web打印⽅案:
现有的Web打印控制技术分成⼏种⽅案:
⼀.⾃定义控件完成打印
利⽤IE ⾃带的WebBrowser 控件实现打印
利⽤第三⽅控件实现打印
1、 ⾃定义控件⽅式
⾃定义控件⽅式就是利⽤VB 或VC 等⼯具⽣成COM 组件,⽤定义好的打印格式来分析打印源⽂件从⽽实现打印。只有将⽣成的组件下载并注册到客户机上,才能实现在客户端的
打印。
难点主要是定义打印格式、如何来分析打印源⽂件。现有的⽐较好的⽅法是利⽤XML 技术来全⾯的解决问题,利⽤XML 可以⾮常容易地定义打印⽬标的⽂本、表格等内容的格式。
但对程序员的开发要求⾼,难度⽐较⼤。
2、利⽤WebBrowser 实现Web打印
WebBrowser是IE 内置的浏览器控件,⽆需⽤户下载。本⽂档所讨论的是有关IE6.0 版本 的WebBrowser 控件技术内容。与其相关的技术要求有:打印⽂档的⽣成、页⾯设置、打印操作的实现等⼏个环节。
(⼀)、打印⽂档的⽣成
1、客户端脚本⽅式
让爱自由落体
客户端脚本分为VBScript、JavaScript、JScript ⼏种脚本语⾔。在IE 下开发应⽤使⽤的语法为JScript 的语法,由于它和JavaScript ⼏乎没有什么区别,所以也可以称其为JavaScript(下⾯简写为JS)。⼀般情况下,主要使⽤JS 来实现DOM ⽂档的分析,DOM 为微软提 出的⼀种Web⽂档模型,主要⽤来实现Web脚本编程。
利⽤JS 可以分析源页⾯的内容,将欲打印的页⾯元素提取出来,实现打印。通过分析源⽂档的内容,可以⽣成打印⽬标⽂档。
优点:客户端独⽴完成打印⽬标⽂档的⽣成,减轻服务器负荷;
缺点:源⽂档的分析操作复杂,并且源⽂档中的打印内容要有约定;调墨油
2、服务器端程序⽅式
服务器端程序⽅式,主要是利⽤后台代码从数据库中读取打印源,⽣成打印⽬标⽂档。当的页⾯⽣成时,还应适当考虑使⽤CSS 来实现强制分页控制。
优点:可以⽣成内容⾮常的丰富的打印⽬标⽂档,⽬标⽂档的内容的可控性强。由于打印 内容是从数据库中获取的,所以⽣成操作相对简单;
缺点:服务器端负载⽐较⼤;
(⼆)、页⾯设置
页⾯设置主要是指设置打印⽂档的页边距、页眉、页脚、纸张等内容。页⾯设置将直接影响到打印⽂档版⾯的⽣成效果,所以它和打印⽂档的⽣成有着密切的关系。⽐如:表格的
⾏数、⼤⼩、位置、字体的⼤⼩等。
现有的技术是利⽤IE6.0 内置的打印模板⽅式来控制页⾯设置,其可以对打印⽬标⽂档产⽣⾮常⼤的影响。打印模板可以控制页边距、页眉、页脚、奇偶页等内容,并可以将⽤户的设置取得,还可以将设置发送到服务器端。
打印模板技术可以⾃定预览窗⼝和打印格式,最⼤限度地影响⽬标⽂档和打印效果。
(三)、打印操作的实现
此功能的实现主要是利⽤WebBrowser控件的函数接⼝来实现打印、打印预览(默认的)、
页⾯设置(默认的)。
CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'>
/
/打印
WebBrowser1.ExecWB(6,1);
//打印设置
WebBrowser1.ExecWB(8,1);
//打印预览
WebBrowser1.ExecWB(7,1);
3、 ⼀个实例项⽬采⽤的打印⽅案
服务器端程序⽅式、打印预览接⼝调⽤, 下⾯为例, 主要参考项⽬中的:
pageErrorPrint.aspx.vb ⽂件
主调⽤页
function PrintPage(iPageIndex,strQuery)
{关于依法严惩危害食品安全犯罪活动的通知
var strURL;
strURL = "PageErrorPrint.aspx?PageIndex=" + iPageIndex + "&QueryString=" +
strQuery;
四川卫视中国爱
winPrint=window.open(strURL,"","left=2000,top=2000,fullscreen=3");
}
打印页HTML 源中的预览控制
document.write("
CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'>
");
WebBrowser.ExecWB(7,1);
window.opener=null;
window.close();
程序头
'⾸先声明表格容器
Protected WithEvents phContainer As System.Web.UI.WebControls.PlaceHolder
'每个表格中的记录数量
Private Const ItemPerTable As Integer = 20
关键的实现部分
'创建⼀个符合打印要求的表格通辽市工商局
tabPagePrint = NewPrintTable()
'将表头添加到此表格中
李宝健Call AddTableTitle(tabPagePrint)
'初始化记录器
i = 0
iItemIndex = iStartPoint
For Each clsItem In clsAllData.ErrorCollection
If i > 0 And i Mod ItemPerTable = 0 Then
'添加表格控件到页⾯中
phContainer.Controls.Add(tabPagePrint)
'在页⾯中添加⼀个换⾏符
Call AddPageBreak()
'创建新⼀轮的表格
tabPagePrint = NewPrintTable()
Call AddTableTitle(tabPagePrint)
End If
'将记录添加到表格中
Call AddItemToTable(iItemIndex, tabPagePrint, clsItem) iItemIndex = iItemIndex + 1
i = i + 1
Next
'添加表格控件到页⾯中
phContainer.Controls.Add(tabPagePrint)
⽀持函数
'功能:添加页的换⾏符
Private Sub AddPageBreak()
Dim ltBreak As LiteralControl
ltBreak = New LiteralControl("
")
phContainer.Controls.Add(ltBreak)
End Sub
⼆、利⽤IE⾃⾝打印
这种⽅式⽐较简单,也常⽤的打印⽅式,只需要将报表页⾯设计好,⽤户通过IE菜单中的打印功能完成打印。优点是简单,容易实现,缺点是不灵活,不能控制分页,不能控制好页眉和页脚。
三、将报表导出成Word,Excel或PDF形式打印
这种⽅式需要将页⾯导出成Office⽂档或pdf,最低的要求是客户端已经安装⽤以打开Word、Excel或Pdf⽂档的软件。这种⽅式可以通过⽔晶报表组件或其他⼀些第三⽅控件⾮常容易地实现。导出成Pdf
形式后打印质量和效果都很好,导出成Word或Excel后⽤户可以⾃定义打印的内容和格式。
总之,现有的打印⽅案各有所长,在开发过程中应根据⽤户的需求作选择,利⽤IE打印简单,容易实现,在⽤户需求简单或打印内容较少的情况下采⽤此⽅案⽐较适宜。利⽤⾃定义控件打印可以实现完全⾃定义,但需要较⾼的技术要求和开发周期。利⽤导出的⽅式则可以满⾜⽤户需要⼀点⾃定义或打印内容有多页的需求。
(——部份摘⾃CSDN)
本⽂由来源 21aspnet,由 system_mush 整理编辑,其版权均为 21aspnet 所有,⽂章内容系作者个⼈观点,不代表 Java架构师必看对观点赞同或⽀持。如需转载,请注明⽂章来源。

本文发布于:2024-09-21 14:32:52,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/174560.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:打印   实现   内容   控件
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议