Java JasperReport设置参数

Java JasperReport设置参数,java,xml,jasper-reports,Java,Xml,Jasper Reports,我和JasperReport有些问题。我通过iReport生成了一个*.jrxml文件。 这里我定义了一些字段。现在我想在Java应用程序中设置这些字段,但它不起作用 我的代码看起来像 JasperReport report; JasperPrint print; HashMap<String, Object> parameters = new HashMap<String, Object>(); parameters.put("logoPat

我和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();
    }
JasperReport报告;
碧玉版画;
HashMap参数=新的HashMap();
参数.put(“logoPath”,“\\logo.jpg”);
参数。put(“公司名称”、“公司名称”);
试一试{
报告=JasperCompileManager
.compileReport(“JRXML\\Template.JRXML”);
for(JRField字段:report.getFields()){
System.out.println(field.getName()+“|”
+field.getValueClassName());
}
print=JasperFillManager.fillReport(报告、参数、,
新JREptyDataSource());
JasperExportManager.exportReportToPdfFile(打印、,
“\\temp\\Example.pdf”);
JasperViewer.viewReport(打印);
}捕获(例外e){
//TODO自动生成的捕捉块
Logger.getLogger(例如1.class.getName()).log(Level.ALL、,
e、 getLocalizedMessage());
e、 printStackTrace();
}
字段在*.jrxml文件中给出


感谢您的帮助

您将参数与字段混淆了。参数定义为
,而字段定义为
。将公司名称转换为jrxml中的参数,它应该可以工作

来自教程

参数

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

字段

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

原始答案:

使用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());
FileResolver FileResolver=newfileresolver(){
@凌驾
公共文件解析文件(字符串文件名){
URI=null;
试一试{
uri=新uri(this.getClass().getResource(“/”+文件名).getPath());
}捕获(URISyntaxException e){
}
返回新文件(uri.getPath());
}
};
HashMap参数=新的HashMap();
参数.put(“logoPath”,“\\logo.jpg”);
参数。put(“公司名称”、“公司名称”);
参数.put(“报告文件解析程序”,文件解析程序);
...
print=JasperFillManager.fillReport(报告、参数、,
新JREptyDataSource());

您将参数与字段混淆。参数定义为
,而字段定义为
。将公司名称转换为jrxml中的参数,它应该可以工作

来自教程

参数

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

字段

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

原始答案:

使用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());
FileResolver FileResolver=newfileresolver(){
@凌驾
公共文件解析文件(字符串文件名){
URI=null;
试一试{
uri=新uri(this.getClass().getResource(“/”+文件名).getPath());
}捕获(URISyntaxException e){
}
返回新文件(uri.getPath());
}
};
HashMap参数=新的HashMap();
参数.put(“logoPath”,“\\logo.jpg”);
参数。put(“公司名称”、“公司名称”);
参数.put(“报告文件解析程序”,文件解析程序);
...
print=JasperFillManager.fillReport(报告、参数、,
新JREptyDataSource());

您是在谈论字段还是参数?我看到您只是打印出字段,从未设置它们..在.jrxml文件中,我定义了名为logoPath和companyName的字段。在我读过的教程中,他们说我可以用HashMap设置字段,其中键是字段名。虽然我会用fillReport()方法设置参数,但你说的是字段还是参数?我看到您只是打印出字段,从未设置它们..在.jrxml文件中,我定义了名为logoPath和companyName的字段。在我读过的教程中,他们说我可以用HashMap设置字段,其中键是字段名。虽然我会用fillReport()方法设置参数,谢谢你的回答,但没有解决问题。在pdf文件中,所有字段都显示为null。好的,我建议您从java代码和jrxml中注释掉关于logo.jpg的部分,然后运行它,如果出现“Company Name”,然后是文件解析程序问题,另外参数有问题。我已经注释掉了xml和java应用程序中的logoPath字段,但companyName的值仍然为null。它在xml文件中给出,作为jrxml中为logoPath和companyName定义的参数类是什么?谢谢为了你的答案,但没有解决问题。在pdf文件中,所有字段都显示为null。好的,我建议您只需从java代码和jrxml中注释掉关于logo.jpg的部分,然后运行它,如果出现“Company Name”,那么这是一个文件解析程序问题,或者参数有问题。我已经注释掉了xml和java应用程序中的logoPath字段,但是Company的值