0

我对 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 文件中给出。

谢谢你的帮助

4

1 回答 1

3

您将参数与字段混淆。参数定义为<parameter name="companyName" class="java.lang.String" isForPrompting="false">,而字段定义为<field name="companyName" class="java.lang.String"/>。将公司名称转换为 jrxml 中的参数,它应该可以工作。

教程

参数

参数是传递给报表填充操作的对象引用。它们对于将通常无法在其数据源中找到的数据传递给报表引擎非常有用。

字段

报告字段表示将数据从数据源映射到报告生成例程的唯一方法。当报表的数据源为 ResultSet 时,所有字段必须映射到 ResultSet 对象中的对应列。也就是说,它们必须与它们映射的列具有相同的名称和兼容的类型。

原始答案:

为 logo.jpg 使用 FileResolver,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());
于 2012-12-20T12:07:24.627 回答