JasperReport设置参数

时间:2012-12-20 11:50:36

标签: java xml jasper-reports

我遇到了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文件中给出。

感谢您的帮助

1 个答案:

答案 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());