我遇到了JasperReport的一些问题。我通过iReport生成了一个* .jrxml文件。 在那里,我已经定义了一些领域。现在我想在我的Java应用程序中设置这些字段,但它不起作用。
我的代码看起来像
JasperReport report;
JasperPrint print;
HashMap<String, Object> parameters = new HashMap<String, Object>();
parameters.put("logoPath", "\\logo.jpg");
parameters.put("companyName", "Company Name");
try {
report = JasperCompileManager
.compileReport("JRXML\\Template.jrxml");
for (JRField field : report.getFields()) {
System.out.println(field.getName() + "|"
+ field.getValueClassName());
}
print = JasperFillManager.fillReport(report, parameters,
new JREmptyDataSource());
JasperExportManager.exportReportToPdfFile(print,
"\\temp\\Example.pdf");
JasperViewer.viewReport(print);
} catch (Exception e) {
// TODO Auto-generated catch block
Logger.getLogger(Example1.class.getName()).log(Level.ALL,
e.getLocalizedMessage());
e.printStackTrace();
}
字段在* .jrxml文件中给出。
感谢您的帮助
答案 0 :(得分:3)
您将参数与字段混淆。参数定义为<parameter name="companyName" class="java.lang.String" isForPrompting="false">
,而字段定义为<field name="companyName" class="java.lang.String"/>
。将公司名称转换为jrxml中的参数,它应该可以工作。
来自this教程
<强>参数强>
参数是传入报表的对象引用 灌装作业。它们对于传递给报告非常有用 通常无法在其数据源中找到的引擎数据。
<强>字段强>
报告字段代表从数据源映射数据的唯一方法 进入报告生成例程。当数据源的时候 report是一个ResultSet,所有字段都必须映射到相应的列中 ResultSet对象。也就是说,它们的名称必须与 他们映射的列和兼容的类型。
原始答案:
使用FileResolver for logo.jpg,Jasper将用它来解析文件位置。
FileResolver fileResolver = new FileResolver() {
@Override
public File resolveFile(String fileName) {
URI uri = null;
try {
uri = new URI(this.getClass().getResource("/" + fileName).getPath());
} catch (URISyntaxException e) {
}
return new File(uri.getPath());
}
};
HashMap<String, Object> parameters = new HashMap<String, Object>();
parameters.put("logoPath", "\\logo.jpg");
parameters.put("companyName", "Company Name");
parameters.put("REPORT_FILE_RESOLVER", fileResolver);
...
print = JasperFillManager.fillReport(report, parameters,
new JREmptyDataSource());