我使用JasperReport制作报表引擎。到目前为止,一切正常,但我对小小的理解很少。在我的代码中,我正在尝试编译模板文件并返回JasperReport对象,如果编译失败,则编译另一个文件并返回错误消息。但由于某种原因它不起作用。这是我的代码:
/**
* Generates JasperPrint object from the Template file
* @param Template File Name (String)
* @param Parameters (Map<String, Object>)
* @param Collection of Value Objects (Collection, List, ArrayList)
* @return JasperPrint
*/
private JasperPrint getJRPrint(String tmpltFileLocation, Map<String, Object> params, JRBeanCollectionDataSource dataSource) {
JasperPrint jrPrint = null;
log.info("ReportEngine: compiling " + tmpltFileLocation);
try {
JasperReport jasperReport = JasperCompileManager.compileReport(tmpltFileLocation);
jrPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);
} catch (JRException ex) {
ex.printStackTrace();
return getErrorJRPrint(ex);
}
return jrPrint;
}
private JasperPrint getErrorJRPrint(Exception ex) {
JasperPrint errJrPrint = null;
Map<String, Object> errParams = new HashMap<String, Object>();
errParams.put("errorMessage", ex.getMessage());
try {
JasperReport jasperReport = JasperCompileManager.compileReport(reportFolderName + "errReport.jrxml");
errJrPrint = JasperFillManager.fillReport(jasperReport, errParams);
} catch (Exception ex2) {
ex2.printStackTrace();
}
return errJrPrint;
}
错误模板文件在那里(我试图删除它并且它抱怨文件丢失,所以它可以看到它)。在我的模板文件中,我只是打印错误信息,我也尝试打印一些静态文本,但它不起作用。可能是什么问题?
答案 0 :(得分:1)
我已经尝试过您的代码而没有任何问题。
在您正在打印的报告中,如果您没有填写报告查询或发送数据源,报告将始终为空或不打印(取决于您所做的设置“何时无数据”变量)
如果出现问题,请将“当没有数据”变量设置为“打印除细节以外的所有部分”并将消息放入任何其他频段。
这是变量:
jasperReport.WHEN_NO_DATA_TYPE_BLANK_PAGE
jasperReport.WHEN_NO_DATA_TYPE_NO_PAGES
jasperReport .WHEN_NO_DATA_TYPE_ALL_SECTIONS_NO_DETAIL
如果您使用的是iReport,则更容易更改。
注意:如果使用iReport创建报告,请确保iReport使用相同的JasperReport库版本。
答案 1 :(得分:0)
为什么需要在运行时编译jrxml?您是否尝试在iReport中编译它并通过
获取JasperReport对象
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);
无论如何,如果生成了jrxml文件,请尝试在iReport中编译它,看看它是否有任何投诉。