jsp页面实现打印功能

在实际应用中,打印是一项常用的必备功能。在JSP的项目开发中,如何实现打印功能呢?方法有很多,当然实现的难易也不同。本文介绍两种简单的实现方法:第一种方法,将JSP的运行结果生成为Word文档或Excel文档,利用office自身的打印功能;第二种方法,通过DOM设定需要打印的页面部分,再通过JavaScript函数print()调用浏览器自带的打印功能。

以下通过实例进行说明。

一、    方法一的实例

以图1所示的效果为例。图1中显示了需要打印的数据格式和数据内容。

 

1

步骤:

1.先通过Word文档建立图2所示的形式,将相应的word文档另存为“htm”“html”网页文件。

2

2.将上述网页文件后缀名改为.jsp。以编码方式打开文件后,看见很多代码,这些代码是由word自动生成的,与常规的html代码不太相同,我们无须太多关注。

3.在上述jsp文件中添加以下代码:

<%@ page contentType="application/msword;charset=GBK" %>

4.为了能够打印不同学生的数据,实际的准考证编号、姓名等等数据由数据库提供。也就是说,学生在网上报名参加比赛,填写自己的基本信息,最后由系统生成准考证号、考场、座位号。不管怎样,这些数据都保存的数据库中。由于篇幅所限,如何进行网上报名,填写考生基本信息,如何自动生成准考证号、考场、座位号,本实例不进行讨论。只着重讨论如何提取出数据,填写在相应的位置上。

设计如表1所示的数据表t_info

字段名称

类型

长度

说明

备注

id

int

4

自动增加,主键

记录号

name

char

4

非空

姓名

studentid

char

10

非空

学号

department

varchar

12

非空

系别

grade

char

4

非空

年级

major

varchar

20

非空

专业

room

int

2

 

考场

seat

int

2

 

座位

exam_id

char

11

 

准考证号

5.在上述jsp文件中,添加与数据库查询操作相关的代码。具体如下(2-31行所示):

6.将要打印的数据填写到具体的位置上。

1)填写考试年份(172-175行)

2)填写准考证号(223行)

3)填写其他数据。

4)填写代码,关闭与数据库的连接。

7.启动服务器,输入http://127.0.0.1:8080/xxx/demo11.jsp?ID=xx进行查看(这里假设前述JSP文件名为demo11.jsp,传入的ID值为记录号,由登录报名的考生实际决定),弹出如下窗口:

可以直接打开,也可以保存

8.在打开第7步得到的word文档后,利用Word自带打印功能进行打印操作。

小结:此方法8个步骤,看起来十分繁琐,其实不然。实际上就是2个步骤:先定义Word文档并另存为html文件,然后改为JSP文件并填入JSP脚本片段。

通过Excel进行打印的做法类似,不再赘述。

二、    方法二的实例

以图3为例。打印页面中的表格。

3

具体代码如下:

实际应用时,<table>的具体形式根据实际情况制定,24行、28行这些数据实际由数据库中读取。也就是说,在上述代码的基础上,添加实际的JSP脚本即可。

 

 

其他的控制打印的方法也很多,基本原理是一致的:设置格式、动态填入需打印的实际数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先引入一个WebBrowser在需要打印的页面,可以直接添加: 复制代码 代码如下: <object id="WebBrowser" classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height="0" width="0"> </object> 2 .页面设置和打印预览 如下所示,直接调用即可 复制代码 代码如下: document.all.WebBrowser.ExecWB(6,6) 直接打印 document.all.WebBrowser.ExecWB(8,1) 页面设置 document.all.WebBrowser.ExecWB(7,1) 打印预览 3 隐藏不打印的页面元素和分页 CSS 有个Media 属性,可以分开设置打印和显示的格式。 如 <style media="print" type="text/css"> …</style> 中间的格式将只在打印时起作用,不会影响显示界面。 所以可以设定 <style media="print" type="text/css"> .Noprint{display:none;} .PageNext{page-break-after: always;} </style> 然后给不想打印的页面元素添加: class="Noprint" ,那就不会出现在打印打印预览中了。 想分页的地方添加: <div class="PageNext"></div> 就可以了。 4.打印页面的特定部分 通过将需要打印的特定部分另建一个页面,然后装入主页面的一个IFrame中,再调用IFrame的打印方法,只打印IFrame中的内容实现的。 如: <iframe visible" name="FrameId" width="100%" height="30%" src="NeedPrintedPage.asp"></iframe> 下面的pringFrame js函数将只打印Iframe中的内容,可以直接引用使用,如printFrame(FrameId); 复制代码 代码如下: window.print = printFrame; // main stuff function printFrame(frame, onfinish) { if ( !frame ) frame = window; function execOnFinish() { switch ( typeof(onfinish) ) { case "string": execScript(onfinish); break;
重点: <OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0 VIEWASTEXT> </OBJECT> <input type=button value=打印 " class= "NOPRINT "> <input type=button value=直接打印 " class= "NOPRINT "> <input type=button value=页面设置 " class= "NOPRINT "> <input type=button value=打印预览 " class= "NOPRINT "> 注意: 1、CSS对打印的控制: <!--media=print 这个属性可以在打印时有效--> <style media=print> .Noprint{display:none;} .PageNext{page-break-after: always;} </style> Noprint样式可以使页面上的打印按钮等不出现在打印页面上,这一点非常重要,因为它可以用最少的代码完成最需要的功能 PageNext样式可以设置分页,在需要分页的地方 就OK了,呵呵 2、表格线粗细的设置,更是通过样式表: <style> .tdp { border-bottom: 1 solid #000000; border-left: 1 solid #000000; border-right: 0 solid #ffffff; border-top: 0 solid #ffffff; } .tabp { border-color: #000000; border-collapse:collapse; } </style> 或者: <style> .TdCs1 { border:solid windowtext 1.0pt; } .TdCs2 { border:solid windowtext 1.0pt; border-left:none; } .TdCs3 { border-top:none; border-left:solid windowtext 1.0pt; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; } .TdCs4 { border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; } .underline { border-top-style: none; border-right-style: none; border-bottom-style: solid; border-left-style: none; border-bottom-color: #000000; } </style> 1、控制 "纵打 "、 横打”和“页面的边距。 (1) [removed] function SetPrintSettings() {  // -- advanced features  factory.printing.SetMarginMeasure(2) // measure margins in inches  factory.SetPageRange(false, 1, 3) // need pages from 1 to 3  factory.printing.pri

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值