我正在做一个具有以下要求的 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/