[转] http://www.blogjava.net/midstr/archive/2009/02/25/256597.html
做管理系统的时候,打印一直是个棘手的问题,做B/S的系统这个问题就更加突出了!下面举出三种常用的web打印处理方式
1、利用word或者excel来实现web打印(如果不修改ie设置,可以在web服务器端生成xls文件,然后通过xlBook = xls.Workbooks.Open(remotePath) 获取对象打印)
实现过程:先将需要打印的数据导入到word或者excel中,再利用word或者excel的打印功能来实现web打印。
下面以excel为例实现如何打印的过程
将网页中数据导入excel中的方法有很多,这里先介绍一种,利用ActiveX控件的方式,即 Excel.Application, 这个控件是MS为excel提供的编程接口,在很多种编程语言种都可以通过该接口来操纵excel表格。
下面用javascript脚本来实现一个简单的例子。
< script language="javascript">
function ExcelPrint(){
var excelApp;//存放Excel对象
var excelBook;//存放Excel工件簿文件
var excelSheet;//存放Excel活动工作表
try{
excelApp = new ActiveXObject("Excel. Application");//创建Excel对象}
catch(e){
alert("请启用ActiveX控件设置!");
return;}
excelBook = excelApp.Workbooks.Add();//创建Excel工作簿文件
excelSheet = excelBook.ActiveSheet;//激活Excel工作表
var rowLen = printTable.rows.length;//table对象的行数
for (var i=0;i< rowLen;i++){
var colLen = printTable.rows(i).cells.length;//table对象的列数
for (var j=0;j< colLen;j++)//为Excel表的单元格赋值
excelSheet.Cells(i+1,j+1).value = printTable.rows(i).cells(j).innerText;} //将表格中的每个单元格的innerText导入到excel的单元格中
excelApp.Visible = true;//设置Excel对象可见}
excelSheet.PrintOut(); //打印工作表
excelBook.Close(true); //关闭文档
excelApp.Quit(); //结束excel对象
excelApp=null; //释放excel对象
< /script>
注意:
运行该程序的前提是 IE要允许对没有标记为安全的Activex控件进行初始化和脚本运行。设置方法如下:
打开控制面板→Internet选项→安全性→自定义级别→对没有标记为安全的ActiveX控件进行初始化和脚本运行→选中启用,这样我们的程序就可以运行了。如果没有启用该ActiveX控件设置,那么程序在执行创建Excel对象时会抛出一个异常,这时可以通过catch()语句来捕获这个异常,并且做出相应的处理。
运行该程序必须客户端安装了MS EXCEL,否则Activex驱动不了。
2、利用浏览器自带的打印控件来实现web打印
实现过程:直接调用IE的打印功能或者在程序中调用window.print()来实现web打印,页眉和页脚会有网页标题、页码、网址,日期等信息,这些打印时如果不需要,怎样能去掉呢。做法其实很简单,只有在IE的文件菜单中打开页码设置对话框,去掉页眉页脚中设置的哪些信息,就可以了。但是这需要每个客户端都去手动设置一次。如果不想让每个客户端都手动去设置一次,也可以用代码通过修改注册表的键值来实现。
下面是用VBScript来实现的修改注册表的过程:
< script language="VBScript">
dim path, reg
'path存放IE打印设置的注册表地址, reg存放WScript.Shell组件的对象
path = "HKEY_CURRENT_USER\Software\Micro-soft\Internet Explorer\PageSetup"
'通过注册表修改打印设置,只修改页眉、页脚和各边界的值
'参数说明:header--页眉,footer--页脚,margin_left--左边界
'margin_top--上边界,margin_right--右边界,margin_bottom--下边界
'页边距的设置中 1对应25.4mm,即margin_left=1表示实际值的25.4mm
function pagesetup(header, footer, margin_left, margin_top, margin_right, margin_bottom)
On Error Resume Next
Set reg = CreateObject("WScript.Shell")
if err.Number>0 then
MsgBox "不能创建WScript.Shell对象!"
exit function
end if
reg.RegWrite path+"\header", header'设置页眉
reg.RegWrite path+"\footer", footer '设置页脚
reg.RegWrite path+"\margin_left", margin_left'设置左边界
reg.RegWrite path+"\margin_top", margin_top'设置上边界
reg.RegWrite path+"\margin_right", margin_right'设置右边界
reg.RegWrite path+"\margin_bottom", margin_bottom'设置下边界
end function
< /script>
还有一点需要注意的是,利用window.print()这样的方法来打印,是直接弹出打印对话框,而不是打印预览的窗口。一般来说用户希望先打印预览一下,然后再打印。或者有的格式固定的,每次都是一样的格式,就希望不弹出打印对话框,直接就打印出来。
还有的用户希望每个打印都是直接和一种纸张绑定好,打印时候直接就调用那种类型的纸张来打印,这样window.print()显然远远不够。
3、利用第三方的控件或者报表软件来实现web打印
实现过程:第三方控件将打印的参数和方法封装成对象,在页面中可以方便的直接调用,例如ScriptX.cab,eprint.cab 都是这种类型的控件。可以直接用代码实现web打印页眉页脚的设置,web打印纸张的绑定,web打印边距的设置,web打印预览,直接web打印。
web打印格式设置,web打印分页,web打印换页重新打印某些信息,某些信息只能第一页打印,某些信息只能最后一页打印等等这些,也都解决方案。Scriptx没有处理这些的方案,webprint有webgrid和eprint两种解决方案,行列规则的表格式的可以简单webgrid来处理,复杂格式的可以用eprint来设计格式。
一般这种类型的打印控件都是需要收费的,用户可以从经济的角度来考虑。
==========================================================================================================
一、 浏览器的打印功能菜单
这种方案的优势是不需要对浏览器作任何扩充,是最简单的办法,但问题也最多,如:
不能精确分页。
浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。会有页脚页眉干扰。
不能准确对齐边边距及打印文字。
不能解决连续打印。
比如,不是仅打印一张票据,而是连续一次打印若干个票据。
二、 使用webbrowser控件+ javascript
这实际上,是浏览器打印功能菜单的一种程序调用,与打印功能菜单没什么两样。分页的问题仍然存在,只不过,可以让用户不用去点菜单,直接在网页中的一个按钮,或一个链接里面调用罢了。
三、 使用print css
这是一种最理想的实现web套打的方法。这种方法通过在html文档中,嵌入打印相关的css样式,来实现对html文档输出打印的控制,比如设置纸张大小,纸张纵横方向,打印边距,分页等。显而易见,这种方式成本小,不需要下载任何插件,而且跨平台性非常好。print css推出已经有些时日,但遗憾的是,至今没有一个厂商的浏览器很好地实现了这些标准,这使得程序员目前还不能利用print css进行实际的开发。关于打印css,参见:
http://css-discuss.incutio.com/?page=PrintStylesheets
四、 使用pdf文件
用这种方式,就是从服务器端下载一个pdf文件流,在IE中用adobe插件打开,然后用adobe的打印菜单进行打印,虽然这种方案,也能实现精确套打,但需要下载adobe插件。这是国外报表工具经常推荐的一种打印方法,但在pdf不那么普及的中国,这种方案不是最好选择。
五、 采用纯ActiveX
这种方案就是下载一个控件,票据的数据不再以html方式呈现,而是呈现在ActiveX中。这种方案的优点是打印的精确度高,分页的可控性好,但缺点也是很明显的,嵌入ActiveX控件破坏了web应用的整体html风格,且这样的控件比较大(一般超过1M,下载颇费时间)。市场上的非java类报表产品,一般都采用这种方案。
六、 采用Applet方式
采用Applet方式,分页或精确打印,都可以做到完美,但缺点也很明显,表现在:
安装Applet成本巨大。需要下载十几M的文件。
Applet本身可能并不大,但运行Applet所需的jre一般至少10几M(jre1.4.2 , 15.45M)。用户需要极大的耐心,来进行打印。
打印报表时,需要重新向服务器检索数据,效率低。
因为Applet方案,一般采用html方式呈现数据,打印时Applet必须向服务器检索同一张票据的数据,看上去,是打印了当前页的票据,实际上,Applet根本不会用当前html页的数据来打印,而是向服务器下载数据到Applet中来打印。也就是说,打印的话,必须两次请求,一次html呈现,一次用来打印。
市场上java类的报表工具,一般推荐Applet方式来实现打印。
七、 轻量级的ActiveX打印方式
这是本公司应客户要求,最新推出的一种最具创意的web套打解决方案。
杰表作为一款纯java的报表工具,以前提供的web套打方案也是基于Applet的,Applet也做到了尽可能的小(只有24kb),但用户还是抱怨,因为jre太大,安装需要耐心。另外,用Applet方式,很难实现客户端的批量打印功能。
我们采用轻量级的ActiveX打印方案,很好地解决了客户的问题。以下是一个典型的该种方案的示例
相关推荐
楚琳Web打印控件是一款专为网页打印设计的软件组件,它使得在Web应用程序中实现打印功能变得更加便捷和高效。这款控件不仅提供了基础的打印服务,还包含了源码,以便开发者可以深入理解其工作原理并进行定制化开发。...
在IT行业中,Web打印插件是一种非常实用的工具,它允许用户通过网页浏览器直接进行打印操作,无需离开当前页面或下载文件到本地。本篇将详细介绍一个被评价为“非常好用”的Web打印插件,特别适合热敏打印,并提供...
首先,我们需要理解Web打印的基本原理。在Web环境中,打印功能通常通过浏览器的打印API或者JavaScript库来实现,它可以将网页内容转化为适合打印的格式,并提供预览和实际打印的功能。对于Excel报表,我们通常需要将...
【Delphi WEB打印服务】是基于Delphi开发的一款高级打印解决方案,它允许用户通过API请求进行打印设计、预览和实际打印操作,无论是本地还是远程环境都能轻松应对。这一技术在C#编程语言中同样适用,可以为C#开发者...
### Web打印设置总结 在数字化办公环境中,Web打印设置成为了不可或缺的一部分,它使得网页内容能够被轻松地转换成纸质文档,满足了用户在不同场景下的需求。本文将深入探讨Web打印设置的几种常见方法,包括直接...
在ASP.NET中实现Web打印功能是一项常见的需求,它允许用户直接从网页上打印内容而无需先下载文件。本文将深入探讨如何在ASP.NET环境中构建这一功能,并基于描述中的"print.html"文件,推测这是一个用于演示Web打印...
在IT行业中,Web打印是一个重要的功能,特别是在开发各种业务系统时,例如提到的物业收费模块。Web打印允许用户直接从浏览器中打印网页内容或者特定的数据,而无需安装额外的插件或应用程序。以下是对"不需要插件的...
在IT行业中,Web打印是一种利用Web技术实现远程打印的功能,尤其适用于需要跨设备或远程操作的场景。在超市环境中,小票打印是至关重要的环节,它涉及到收银、库存管理和客户体验。本篇将深入探讨如何通过Web技术来...
在IT行业中,Web打印控件是一种重要的技术工具,它允许用户在网页上直接进行打印操作,无需通过浏览器的默认打印设置。"免费Web打印控件最新"可能指的是一个最新的、无需付费的解决方案,旨在提高用户体验并简化网页...
在J2EE项目开发中,实现Web票据打印是一项常见的需求,尤其在财务、物流、电商等领域,用户可能需要通过浏览器直接打印出各种票据,如发票、收据、订单等。本文将详细介绍如何在IE浏览器环境下,利用Java技术进行Web...
22.如何构建自己的纯WEB打印预览见样例二十二 23.如何居中打印超文本见样例二十三 24.如何选择界面皮肤见样例二十四 25.如何指定输出到哪页或仅预览见样例二十五 26.如何提高多页打印的性能见样例二十六 27.如何导出...
Java打印预览和Web打印是开发中经常遇到的需求,尤其在企业级应用或者网页服务中。本文将深入探讨如何在Java环境中实现这两种功能,并提供一个名为`JpdPreview`的工具包来帮助开发者轻松实现这一目标。 首先,让...
Web打印技术是将网页或其他Web内容直接通过打印机输出的一种方式,它使得用户无需先将网页保存或打印预览,即可直接进行打印操作。本资源提供的是一个通用的Web打印源码,适用于Java和C#环境,旨在简化Web打印流程,...
在IT行业中,Web打印是一种常见的需求,特别是在网页应用和企业内部系统中。"web打印 demo"这个项目就是针对这一需求的一个实例,它演示了如何在Web环境中实现便捷、高效的打印功能。下面将详细阐述其中涉及的关键...
Web打印在现代网络应用中扮演着重要角色,它允许用户将网页内容转化为纸质形式或PDF文档,方便保存和分享。本文将深入探讨Web打印的原理、实现方式以及优化技巧。 一、Web打印基础 1.1 原理:Web打印主要依赖...
楚琳Web打印控件是一款基于ACTIVEX技术的软件组件,专为网页应用程序设计,用于实现高效的打印功能。在Web应用程序中,用户通常需要将网页内容或者特定数据打印出来,而传统的HTML打印功能可能无法满足复杂的打印...
**JasperReports -- 客户端打印(WEB网页打印)** JasperReports 是一个功能强大的开源报告生成库,广泛应用于Java应用程序中,用于创建复杂的报表和图表。它支持多种数据源,包括数据库查询、XML、CSV等,并且可以...
Web打印控件是一种在网页上实现打印功能的技术解决方案,它使得用户无需下载或安装额外的软件,即可直接从浏览器中打印网页内容。在Asp.net框架下,这种控件能够帮助开发者集成打印功能,为用户提供方便快捷的服务。...
Web打印的解决方案主要关注如何在Web环境中有效地呈现和打印页面内容,尤其是对于普通报表的处理。在传统的Web项目中,通常使用JavaScript来处理打印需求,因为它可以在客户端直接操作DOM元素,实现页面的动态修改和...
7. **替代方案**:如果以上方法都无法解决问题,可以考虑使用其他报表工具,如SQL Server Reporting Services (SSRS) 或Kendo UI等,它们提供了更现代的Web打印解决方案。 在处理这类问题时,日志记录和调试是至关...