[转]JasperReport用户手册之三

3.4报表装填(Filling Report
      
报表装填(report filling)过程是JasperReport library最重要的功能。它体现了这个软件最主要的目的(main objective),因为这一过程可以自由的操作数据集(data set),以便可以产生高质量的文档。有3种材料需要装填过程中作为输入提供给JasperReport
report design
reportl templet
参数(parametersl
数据源(datal source
      
这一过程的输出通常是一个单一的最终要被查看,打印或导出到其他格式的文档。
要进行这一过程,我们需要采用net.sf.jasper.engine.JasperFillManager类。这个类提供了一些方法来让我们装填报表设计(report design),report design的来源可以是本地磁盘,输入流,或者直接就是一个已存在于内存中的net.sf.jasper.engine.JasperReport类。输出的产生是于输入类型相对应的,也就是说,如果JasperFillManager接到一个report design的文件名,装填结束后生成的report将会是一个放在磁盘上的文件;如果JasperFillManager收到的是一个输入流,则生成的report将会被写道一个输出流中。
有些时候,这些JasperFillManager提供的方法不能满足某些特定的应用的要求,例如可能有人希望他的report design被作为从classpath中得到的资源,并且输出的报表作为一个文件存放在一个指定的磁盘目录下。遇到这种情况时,开发人员需要考虑在将报表设计传递给报表装填过程之前,用net.sf.jasper.engine.util.JRLoader类来装载report design对象。这样,他们就能获得像报表名这样的report design属性,于是开发者就能生成最终文档的名字(construct the name of the resulting document),并将它存放到所需的位置上。
      
在现实中,有许多报表装填的情境(scenarios),而装填管理器仅试图覆盖其中最常被使用到的部分。然而对于想要自己定制装填过程的人来说,只要采用上面所说的方法,任何开发者都可以达到满意的结果。
报表参数通常作为java.util.Mapvalue提供给装填管理器,参数名为其键值(key)。
作为装填过程所需的第三种资源数据源,有如下两种情况:
通常,引擎需要处理net.sf.jasper.engine.JRDataSource接口的一个实例,通过这个实例,引擎可以在装填过程中获取所需数据。JasperFillManager提供的方法支持所有的JRDataSource对象(这是一个Interface,上面一章提到过它的常用实现)。
      
然而,这个管理器还提供一些接受java.sql.Connection对象作为参数的方法集,来取代所需的数据源对象。这是因为在很多情况下,报表生成所需的数据都来源于某个关系型数据库中的表(table)。
在报表中,用户可以提供SQL查询语句来从数据库中取回报表数据(report data)。在执行期,engine唯一需要做的是获得JDBC connection对象,并使用它来连接想要连接的数据库,执行SQL查询并取回报表数据。在后台,引擎将使用一个特殊的JRDataSource对象,但是它对于调用它的程序来说是透明的。
JasperReport
工程提供了相关的例子,它们采用HSQL数据库服务器(在工程文件中,有一个相应的文件夹),要运行这些例子你需要首先启动该服务器,方法是:在/demo/hsqldb目录下输入如下命令:>ant 或者 >ant runServer
      
没装ANT就麻烦点:>java -classpath ./;../../lib/hsqldb.jar org.hsqldb.Server
一下代码片断显示了query例子是如何装填数据的:
//Preparing parameters
Map parameters = new HashMap();
parameters.put("ReportTitle", "Address Report");
parameters.put("FilterClause", "'Boston', 'Chicago', 'Oslo'");
parameters.put("OrderClause", "City");
//Invoking the filling process
JasperFillManager.fillReportToFile(fileName, parameters, getConnection());


3.5
查看报表(Viewing Reports
      
报表填充阶段的输出通常是一个JasperPrint对象,如果把它保存在磁盘上,通常以一个.jrprint文件的形式存在。JasperReport拥有一个内置的查看器,用来查看用内置的XML导出器(XML exporter)获得的XML格式的报表文件。这个查看器就是以前提到过的net.sf.jasper.niew.JRViewer—一个基于Swing的应用程序组件,用户可以通过继承这个类来定制自己所需的查看器。JasperReport工程中自带的例子webapp中,你可以阅读JRViewerPlus类的代码来获取进一步内容。
      
注意:JasperViewer更像是一个教人们如何使用JRViewer组件的演示程序,这里要注意一点,当你调用JasperViewerviewReport()方法来显示报表时,如果你关闭了预览Frame,整个应用程序将会随之结束,因为这个函数最后调用了System.exit(0);你可以通过继承这个类,并重新在你的Viewer里注册java.awt.event.WindowListener来避免这一情况的发生。
3.6
打印报表
       JasperReport
类库的主要目标,就是生成可打印的文档。而且多数应用程序生成的报表都是需要落实(或打印)到纸张上。我们可以用net.sf.jasper.engine.JasperPrintManager来打印JasperReport生成的文档。当然,报表也同样可以在被导出到其他格式如PDFHTML之后再被打印。通过JasperPrintManager提供的方法,我们可以打印整个文档,打印单个文档或打印某一范围内的文档,可以显示打印对话框也可以不显示。下面的例子演示了不显示对话框,打印整个文档的方法:JasperPrintManager.printReport(myReport,false);
这个例子显示了如何打印5-11页的文档,同时显示打印对话框:net.sf.jasper.engine.JasperPrintManager.printPages(myReport,4,10,true);


3.7
导出报表
      
在一些应用程序环境下,将JasperReport生成的文档从其特有的格式导出到其他更为流行的格式如PDFHTML是非常有用的。这样一来,其他人就可以在没有安装JasperReport的情况下查看这些报表,特别是当这些文档要通过网络发送出去的时候。
JasperReport
提供了JasperExportManager类来支持此项功能。这项功能将会在以后不断加入对新的格式的支持。目前,JasperReport主要支持导出PDFHTMLXML类型的文档,下面是导出的代码片断:JasperExportManager.exortReportToHtmlFile(myReport);
      
注意:想要将自己的报表导出到其他格式的用户,需要实现JRExporter的接口,或继承相应的JRAbstractExporter类。


3.8
对象的载入和保存


      
当使用JasperReport的时候,你经常会与序列化的对象,如以编译的报表设计,或已生成的报表打交道。有时,你需要手动载入从不同的sourceinput stream或你用类库核心功能(lib’s core functionality)产生的序列化类。JasperReport提供了两个特殊的工具类来提供上述操作的能力,这些类通常供报表引擎自己使用:
net.sf.jasper.engine.util.JRLoader
net.sf.jasper.engine.util.JRSaver
      
第一个类提供了一些方法让我们能够从不同类型的数据源如文件,URLinput streamclasspath里面获取序列化对象。最令人感兴趣的方法是loadObjectFormLocation(String)。它已经在上一章中介绍过了,这里不再赘述。
      
与上面的对象载入工具相反的部分是JRSaver类,它可以帮助程序员将自己的类序列化之后存放到本地磁盘或通过Output Stream发送到网络上去。
      
有时,开发人员可能想要载入已经生成好的report,或最终的已经被导出到XML格式的JasperReport文档,这与上面所说的直接load序列化对象有所不同。这时,我们需要载入的是将载入的XML内容进行编译,并生成JasperPrint对象,而并非仅仅是载入序列化对象。这时,我们可以通过net.sf.jasper.engine.xml.JRPrintXmlLoader类的一些静态方法,通过编译从XML文件中读取的内容构建出一个位于内存中的文档对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将 JasperReport 换为 Excel 并设置页眉,你可以按照以下步骤进行操作: 1. 首先,确保你已经使用 JasperReports Library 创建了报表模板(.jrxml 文件)并编译成了 Jasper 文件(.jasper 文件)。 2. 导入相关的 Java 类库,包括 JasperReports 和 Apache POI。你可以在项目的依赖管理工具(如 Maven 或 Gradle)中添加相应的依赖。 3. 创建一个 Java 类来执行导出操作。在该类中,你需要加载 Jasper 报表文件,并将其换为 Excel 格式。以下是一个示例代码: ```java import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.export.JRXlsExporter; import net.sf.jasperreports.export.SimpleExporterInput; import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.FileOutputStream; import java.io.OutputStream; public class JasperToExcel { public static void main(String[] args) { try { // 加载 Jasper 报表文件 String reportPath = "path/to/your/report.jasper"; JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, null, new JREmptyDataSource()); // 创建一个 Excel 文档 HSSFWorkbook workbook = new HSSFWorkbook(); // 导出报表到 Excel JRXlsExporter exporter = new JRXlsExporter(); exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); OutputStream outputStream = new FileOutputStream("path/to/output.xls"); exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream)); // 设置页眉 exporter.setConfiguration(getExporterConfiguration()); exporter.exportReport(); // 关闭输出流和 JasperPrint 对象 outputStream.close(); JasperPrintManager.printReport(jasperPrint, true); } catch (Exception e) { e.printStackTrace(); } } private static SimpleXlsReportConfiguration getExporterConfiguration() { SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration(); configuration.setOnePagePerSheet(false); // 设置为 false,使得页眉在每个工作表上都可见 configuration.setDetectCellType(true); configuration.setCollapseRowSpan(false); configuration.setWhitePageBackground(false); configuration.setRemoveEmptySpaceBetweenRows(true); configuration.setIgnoreGraphics(false); return configuration; } } ``` 在上述代码中,你需要将 `reportPath` 替换为你的 Jasper 报表文件的路径,将 `outputStream` 替换为你希望导出的 Excel 文件的输出流。 4. 运行该 Java 类,它将生成一个带有设置的页眉的 Excel 文件。 请注意,上述示例代码中的页眉设置使用了 `SimpleXlsReportConfiguration` 类。你可以根据自己的需求进行更多的定制。此外,还可以使用其他的 Excel 导出器类(如 `JRXlsxExporter`)来生成 .xlsx 格式的文件。 希望这些信息对你有所帮助!如果你还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值