当前位置:文档之家› Web打印技术总结

Web打印技术总结

Web打印技术总结
Web打印技术总结

web程序中打印不象应用程序中那样便于控制了,web程序天生的一些特性造成了这个缺点,如:打印机在本地,而文件确可能在服务器上;格式如何控制和定制等等。都给我们开发中带来了很多问题,虽说有水晶报表等控件来解决但总归是不方便。本文对目前流行的几种方式做个简单介绍:

1网络打印概述

B/S结构导致了Web应用程序中打印的特殊性。

程序运行在浏览器中,打印机在本地,而文件却可能在服务器上,导致了打印控制不是很灵活。

格式如何控制和定制等,是我们开发中可能会面对的问题。

2 打印文档的生成

2.1 客户端脚本方式

一般情况下,主要使用JS可以分析源页面的内容,将欲打印的页面元素提取出来,实现打印。通过分析源文档的内容,可以生成打印目标文档。

优点:客户端独立完成打印目标文档的生成,减轻服务器负荷;

缺点:源文档的分析操作复杂,并且源文档中的打印内容要有约定。

2.2 服务器端程序方式

利用后台代码从数据库中读取打印源,生成打印目标文档。当的页面生成时,还应适当考虑使用CSS来实现强制分页控制。

优点:可以生成内容非常丰富的打印目标文档,目标文档的内容的可控性强。由于打印内容是从数据库中获取的,所以生成操作相对简单;

缺点:服务器端负载比较大。

3 页面设置

◆页面设置主要是指设置打印文档的页边距、页眉、页脚、纸张等内容。页面设置将直接影响到打印文档版面的生成效果,所以它和打印文档的生成有着密切的关系。比如:表格的行数、大小、位置、字体的大小等。

现有的技术是利用IE 6.0内置的打印模板方式来控制页面设置,其可以对打印目标文档产生非常大的影响。打印模板可以控制页边距、页眉、页脚、奇偶页等内容,并可以将用户的设置取得,还可以将设置发送到服务器端。打印模板技术可以自定预览窗口和打印格式,最大限度地影响目标文档和打印效果。

4 打印操作的实现

4.1 IE直接打印

通过直接调用window.print或者webrower控件的ExecWB方法来打印。

优点:方便快捷,客户端无需任何设置即可。

缺点:打印控制不是很灵活。如果直接调用,不能精确分页。浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。会有页脚页眉干扰。不能准确对齐边边距及打印文字。不能解决连续打印。比如,不是仅打印一张票据,而是连续一次打印若干个票据。

4.1.1调用window.print

window.print来打印页面,

优点:方法代码简单、方便快捷、无需任何设置

缺点:页面上别的元素也会被打印处理,页头页尾的格式也不好控制。无法实现“打印设置”

和“打印预览”等功能。(可以利用css中的Media 属性来设置打印和显示的格式)

常用方法:大部分情况会把查询的结果绑定到DataGrid上来,然后打印DataGrid。这种情况的打印一般来说格式比较固定简单,确定后基本不会再作更改。所以可以采用IE直接打印。

实例1:

注:客户端通过window.print打印定义在sprnstr和eprnstr中的内容。

执行代码:

如果直接使用window.print将打印页面上的所有内容,可以使用:

用来指定不打印的内容。

本部分以上不被打印

本部分以下不被打印

onclick=”preview()”>

不打印

打印

value=”print”>

实例2:

实现简单的定制,比如做一个模板htm文件,然后在js中动态创建一个隐藏帧来,用脚本来生成其中的数据,再把最后的结果文件写入到隐藏帧打印处理。如果处理的好,实际

上效果也是不错。对于简单的打印需求应该是够了。这里我举个实际中的例子来说明这种方式:

开发中经常需要打印一些统计的结果给用户,比如说一个常见的功能是营业报表类的打印:操作员先输入查询条件,然后提交得到查询的结果,点击打印后,按照定义好的格式打印报表。

我们实现上大部分情况会把查询的结果绑定到DataGrid上来,然后打印DataGrid。这种情况的打印一般来说格式比较固定简单,确定后基本不会再作更改。所以可以采用IE直接打印,但若直接调用window.print来打印结果页面,页面上别的无关元素也会被打印出来,页头页尾的格式也不好控制,所以采用把需要打印的数据动态写入到隐藏帧中打印的方式来实现

代码示例:https://www.doczj.com/doc/c2680268.html,中打印指定的DataGrid内容

其中借用来自微软的一段j s代码,整个js代码如下:

);

);

//下面的脚本来自msdn

程序中在Page_Load里面加上:

btPrint.Attributes.Add(“onclick”,”return Print DataGrid(document.all(…SheetList?))”);

注:SheetList为需要打印的DataGrid ID,在查询后,btPrint为页面上打印按钮的ID

可以将上述脚本代码写在一个js文件中,然后再aspx文件中引用,如 ,上述代码的原理比较简单,我不在多说。上述代码可以实现直接打印页面上指定控件的内容,当然最多还是打印table的内容,如果需要先预览后打印。需要

作一个空的html文件,然后动态写入需要打印的内容:

var preDlg = window.open(“PrintList.ht m”);

CreateHt m lReport(preDlg, true);

4.1.2 利用WebBrowser控件实现

WebBrowser控件是IE内置的浏览器控件,它是ActiveX控件,无需用户下载,此功能的实现主要是利用WebBrowser控件的函数接口来实现打印、打印预览(默认的)、页面设置(默认的)。

优点: 可以轻松实现打印、页面设置和打印预览等功能,客户端能独立打印目标文档,减轻服务器端负荷;

缺点: 源文档的分析操作复杂,并且源文档中的打印内容要有约束。

在把DataGrid转换为对应的HTML代码时,如果存在按钮列就会报错,最好把这一列隐藏,一般只能转换数据列。其次要注意分页问题,一般只能打印当前一页,最好在打印之前除掉分页。

关于这个组件还有其他的用法,列举如下:

WebBrowser.ExecWB(1,1) 打开

Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口

Web.ExecWB(4,1) 保存网页

Web.ExecWB(6,1) 打印

Web.ExecWB(7,1) 打印预览

Web.ExecWB(8,1) 打印页面设置

Web.ExecWB(10,1) 查看页面属性Web.ExecWB(15,1) 好像是撤销,有待确认Web.ExecWB(17,1) 全选

Web.ExecWB(22,1) 刷新

Web.ExecWB(45,1) 关闭窗体无提示

4.1.3将报表导出成Word,Excel或PDF形式打印

通过将页面导出成Office文档或pdf。最低的要求是客户端已经安装用以打开Word、Excel或Pdf文档的软件。该方式可以通过水晶报表组件或其他一些第三方控件非常容易地实现。

优点:使用这种方法,可适应性比较强,控制较好。可以在服务端或者客户端进行。导出成Word或Excel后用户可以自定义打印的内容和格式,可以完成非常复杂的文档格式,进行精细的控制,可适应性强、易于控制.。开发周期短、维护成本低,用户使用方便,并且可以跨平台运行;( 导出成Pdf形式后打印质量和效果都很好)

缺点:数据导出前难以生成打印预览在服务端使用的话,要求服务端要安装Word,Excel,在客户端使用的话,要求客户端在IE的安全设置上有一定要求。

Word作为文档处理软件,它在处理文档和资料的过程中显示出了强大的功能。实现过程:

先将需要打印的数据导入到word或者excel中,再利用word或者excel的打印功能来实现web打印。,主要通过设置Response对象的ContentType属性为输出文件的类型来实现的。

如果不修改ie设置,可以在web服务器端生成xls文件,然后通过xlBook = xls.Workbooks.Open(remotePath) 获取对象打印)

Excel 为例实现如何打印的过程

导出到Excel有两种方法可以实现:一种通过浏览器直接导出;另外一种通过COM接口来实现。

1.利用ActiveX控件的方式将网页中数据导入excel中的方法有很多,即Excel.Application, 这个控件是MS为excel提供的编程接口,在很多种编程语言种都可以通过该接口来操纵excel表格。

下面用javascript脚本来实现一个简单的例子。

注意:

运行该程序的前提是IE要允许对没有标记为安全的Activex控件进行初始化和脚本运行。设置方法如下:打开控制面板→Internet选项→安全性→自定义级别→对没有标记为安全的ActiveX控件进行初始化和脚本运行→选中启用,这样我们的程序就可以运行了。如果没有启用该ActiveX控件设置,那么程序在执行创建Excel对象时会抛出一个异常,这时可以通过catch()语句来捕获这个异常,并且做出相应的处理。

运行该程序必须客户端安装了MS EXCEL,否则Activex驱动不了。

2. 通过浏览器直接导出出到Excel具体代码如下:

相关主题
文本预览
相关文档 最新文档