java - 贾斯珀 : Compiling same jrxml file into multiple output formats

标签 java jasper-reports

我正在做一个具有以下要求的 POC:

我的数据库中有两个表 A 和 B,它们具有相同的列和列类型。

我正在运行以下查询来获取两个表之间的差异。相同的键,不同的列或行存在于一个中但不存在于另一个中:

 SELECT MIN(TableName) as TableName, ID, COL1, COL2, COL3 ...
 FROM
 (
 SELECT 'Table A' as TableName, A.ID, A.COL1, A.COL2, A.COL3, ...
 FROM A
 UNION ALL
 SELECT 'Table B' as TableName, B.ID, B.COL1, B.COl2, B.COL3, ...
 FROM B
) as tmp
GROUP BY ID, COL1, COL2, COL3 ...
HAVING COUNT(*) = 1
ORDER BY ID

一旦我得到Java集合中的差异行,我想将它们输出为报告。

但是,要求是输出格式应该是可配置的。例如如果要求生成PDF,则输出应该是PDF。如果要求是XLS,则输出应该是XLS。

现在,我正在探索生成单个 JRXML 文件并将相同的 JRXML 编译为 PDF 或 XLS 的可能性。

这可能吗?谁能给我举一个例子,其中相同的 JRXML 被编译成多种输出格式。

感谢您的阅读!

最佳答案

是的,这是可能的。您必须编写 jrxml 并编译成 jasper 文件。然后,当您拥有 JasperPrint 时,您可以要求构建 PDF 文件 (JRPdfExporter):

public ByteArrayOutputStream fillPDF(JasperPrint jasperPrint) throws Exception{
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     JRPdfExporter exporter = new JRPdfExporter();
     exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
     exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM,baos); 
     exporter.exportReport(); 
     return baos;
}

或 XLS 文件 (JRXlsExporter):

public ByteArrayOutputStream fillXLS(JasperPrint jasperPrint) throws Exception{
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     JRXlsExporter exporterXls = new JRXlsExporter();
     exporterXls.setParameter( JRExporterParameter.JASPER_PRINT, jasperPrint );
     exporterXls.setParameter( JRExporterParameter.OUTPUT_STREAM, baos);
     exporterXls.exportReport(); 
     exporterXlsbaos;
}

注意:简单来说,我已经重复了代码,但是您可以编写一个方法和一个带有报告类型的参数。此外,您还可以正确处理异常。

关于java - 贾斯珀 : Compiling same jrxml file into multiple output formats,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22660173/

相关文章:

java - 应用类中的内部类,对吗?

java - 碧 Jade 报告 : How to use subreport return values as input for Main Report Variable Calculation

java - 通用数据类型参数

java - 一个项目 - 多个程序

java - 找到数组中最接近的值并将其删除

java - 将对象从 TestSuite 传递到 juint4 中的 TestCase

java - 动态报告: Custom Group Footer based on Group Name

java - 为什么从 java 添加时条件样式在子报表中不起作用?

java - net.sf.jasperreports.engine.JRRuntimeException : Export property type interface java. 实用程序。不支持 map

jasper-reports - JfreeChart自定义票据标签