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



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



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



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



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



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



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






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