Board logo

标题: jatoolsprinter打印Jasperreport报表 [打印本页]

作者: three    时间: 2010-6-24 12:51     标题: jatoolsprinter打印Jasperreport报表

昨天下了jasperreport的最新版本3.7.3看了下。弄了半天还是没能习惯他的报表制作方式。看了下他的打印是利用applet的来打印的。而且还需要客户端安装 十几MB的 jre 关于这个好坏,每个人都有自己的看法。今天我这里要说的是利用jatoolsprinter控件来打印jasperreport的报表。控件大小只有100k左右 关于jasperreport的报表制作这里不做说明,我是在环境中跑了下jasperreport的demo运行界面如下 运行JSP Example 如下图 下面我们对demo中的html.jsp进行修改 用jatoolsprinter来打印Jasperreport 的报表 蓝色部分为控件需要的内容 <%@ page contentType="text/html; charset=gb2312" language="java" %> <%@ page errorPage="error.jsp" %> <%@ page import="datasource.*" %> <%@ page import="net.sf.jasperreports.engine.*" %> <%@ page import="net.sf.jasperreports.engine.util.*" %> <%@ page import="net.sf.jasperreports.engine.export.*" %> <%@ page import="net.sf.jasperreports.j2ee.servlets.*" %> <%@ page import="java.util.*" %> <%@ page import="java.io.*" %>

<% File reportFile = new File(application.getRealPath("/reports/WebappReport.jasper")); if (!reportFile.exists()) throw new JRRuntimeException("File WebappReport.jasper not found. The report design must be compiled first."); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath()); Map parameters = new HashMap(); parameters.put("ReportTitle", "Address Report"); parameters.put("BaseDir", reportFile.getParentFile()); JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, parameters, new WebappDataSource() ); JRHtmlExporter exporter = new JRHtmlExporter(); session.setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../servlets/image?image="); exporter.exportReport(); %> 因为jatoolsprinter的打印是根据
来区分打印的页的。而Jasperreport生成的html页面中又没有包含这些信息,所以我们就需要修改下Jasperreport的源码 由生成的报表页面的源码中我们可以看到Jasperreport是利用来区分页数的我们可以找到package net.sf.jasperreports.engine.export 下的JRHtmlExporter.java 找到代码中的exportReportToWriter方法里的如下片段 writer.write("\n"); 在这段代码之后加上 writer.write("
\n"); 然后找到源码中的 exportPage(page); 在他之后加上div的结束标志 writer.write("
\n"); 以上代码蓝色部分为后添加的内容 修改之后的代码如下 writer.write("\n"); writer.write("
\n"); /* */ exportPage(page); writer.write("
\n"); 修改完这些之后我们就把jatoolsPrinter.cab放在项目中html.jsp codebase指定的位置这里指定的是和html.jsp同一路径 现在打开IE 运行 demo 第一次运行会提示安装jatoolsprinter控件 选择安装ActiveX控件 点击安装 点击打印预览效果如下 到此就可以在web页面中直接打印Jasperreport 报表了。 [ 本帖最后由 three 于 2010-6-24 13:37 编辑 ]

图片附件: 2010-06-24_111901.png (2010-6-24 12:57, 24.77 KB) / 该附件被下载次数 9338
http://jatools.com/attachment.php?aid=240&k=d2412d061d5ebda0c09fddb1d0de95d2&t=1715946803



图片附件: 2010-06-24_112926.png (2010-6-24 12:57, 15.38 KB) / 该附件被下载次数 9208
http://jatools.com/attachment.php?aid=241&k=67f834cb4824487f9ed467ee9671adbd&t=1715946803



图片附件: 2010-06-24_115143.png (2010-6-24 12:57, 15.94 KB) / 该附件被下载次数 9201
http://jatools.com/attachment.php?aid=242&k=e1a0d92a77b10ce1f712aafd680aa3a7&t=1715946803



图片附件: 2010-06-24_115501.png (2010-6-24 12:57, 5.74 KB) / 该附件被下载次数 9295
http://jatools.com/attachment.php?aid=243&k=0cefe76a0cbcedfdaa21bbe04e022ee5&t=1715946803



图片附件: 2010-06-24_115740.png (2010-6-24 12:57, 16.11 KB) / 该附件被下载次数 9260
http://jatools.com/attachment.php?aid=244&k=2a120fee8221ccae57cb61805ee8a968&t=1715946803



图片附件: 2010-06-24_115843.png (2010-6-24 12:57, 14.6 KB) / 该附件被下载次数 9203
http://jatools.com/attachment.php?aid=245&k=a9e28bc6b13592f61a8c4da98e115c60&t=1715946803



图片附件: 2010-06-24_115948.png (2010-6-24 12:57, 12.77 KB) / 该附件被下载次数 9210
http://jatools.com/attachment.php?aid=246&k=a66f72c3049bfb17f9a75407c8ce49c1&t=1715946803






欢迎光临 杰表技术论坛 (http://jatools.com/) Powered by Discuz! 6.1.0