gpt4 book ai didi

jasper-reports - 如何在 iReport 中打印包含在另一个列表中的字符串列表?

转载 作者:行者123 更新时间:2023-12-04 01:40:50 24 4
gpt4 key购买 nike

我正在使用 java 和 iReport(来自 jasper)创建一个简单的报告程序,该程序应该以 pdf 格式创建报告,显示 PC 及其 IP 地址、位置、当前是否空闲(由另一个系统处理),以及它当前附属的项目列表(也在其他地方管理)。

我正在为此使用 iReport,并创建了一个虚拟集合生成类,如下所示:

public class PCReports {

public static java.util.Collection PC_collection;
public static java.util.Collection generateCollection() {

PC_collection = new ArrayList<PCLineDTO>();
PCLineDTO line = new PCLineDTO();
line.setIP("192.168.1.1");
line.setLab("location");
line.setActive(true);
line.addProjectName("project1");
line.addProjectName("project2");
line.addProjectName("project3");
PC_collection.add(line);

line = new PCLineDTO();
line.setIp("192.168.1.2");
line.setLab("location2");
line.setActive(false);
line.addProjectName("project1");
line.addProjectName("project2");
PC_collection.add(line);

return PC_collection;
}
}

在这种情况下的实体类是:
public class PCLineDTO {
private String ip;
private String lab;
private Boolean active;
private ArrayList<String> projects;
}

在网上找了一圈,找到了 a way to do something similar ,使用子报表。

问题是,我不知道如何打印作为数据源传递给这个子报表的字符串集合。

在我在 Internet 上找到的示例中,对于主集合中的每个项目,子报表都传递了一个对象集合——每个属性都有自己的 getter 方法——而不是像这里的情况一样的字符串集合。在这些情况下,他们通过 iReport 语法访问了他们需要使用的值,我无法使用,例如:
$F{project}

由于 iReport 寻找包含在它接收的对象中的 getProject 方法,但在这种情况下,它是一个简单的 String 对象(没有 getProject 方法,就像它一样)。

最佳答案

使用子报表或子数据集。

将子报表传递给集合数据源

JRBeanCollectionDataSource($F{Projects})

然后在新的子报表中创建一个名为“_THIS”的新字段,这意味着传递的集合中的 bean 与我想要的值相同

有关更多信息,请在此处查看该类的源代码: JRAbstractBeanDataSource

备注 :这在 JasperReport 3.0.0 中可用,我不确定它是否存在于以前的版本中。
希望这可以帮助

更新 : 刚刚查了SVN,好像这个功能是在JasperReports 2.0.0中实现的

关于jasper-reports - 如何在 iReport 中打印包含在另一个列表中的字符串列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1771864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com