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) / 该附件被下载次数 10446
http://bbs.jatools.com/attachment.php?aid=240&k=d1f3396963be85eb38885b0f31128a69&t=1742213529



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



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



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



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



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



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






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