【问题标题】:JasperReport setting parametersJasperReport 设置参数
【发布时间】:2012-12-20 20:55:52
【问题描述】:

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

感谢您的帮助

【问题讨论】:

  • 你说的是字段还是参数?我看到你只是打印出字段,从不设置它们..
  • 在 .jrxml 文件中,我定义了名称为 logoPath 和 companyName 的字段。我读过的教程他们说我可以使用 HashMap 设置字段,其中键是字段名称。虽然我会使用方法 fillReport() 设置参数

标签: java xml jasper-reports


【解决方案1】:

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

来自this教程

参数

参数是传入报表的对象引用 灌装作业。它们对于传递给报告非常有用 它通常无法在其数据源中找到的引擎数据。

字段

报告字段代表从数据源映射数据的唯一方法 进入报告生成例程。当数据源 报告是一个结果集,所有字段必须映射到相应的列 结果集对象。也就是说,它们必须与 它们映射的列和兼容的类型。

原始答案:

为 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());

【讨论】:

  • 感谢您的回答,但没有解决问题。在 pdf 文件中,所有字段都显示为 null。
  • 好的,我建议只从 java 代码和 jrxml 中注释掉关于 logo.jpg 的部分,然后运行它,如果出现“公司名称”,那么这是一个文件解析器问题,否则有问题带参数。
  • xml 和 java 应用程序中的 logoPath 字段我已经注释掉了,但是 companyName 的值仍然是 null。
  • 它在 xml 文件中作为
  • jrxml中logoPath和companyName定义的参数类是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
相关资源
最近更新 更多