【问题标题】:Using Multiple JavaBean DataSources in Jasper Report在 Jasper Report 中使用多个 JavaBean 数据源
【发布时间】:2012-07-26 21:41:35
【问题描述】:

由于 JasperReport 可以将 JavaBean 集合作为 DataSource。我们可以发送一个带有引用多个 SetCollection 的单个对象的 SetCollection。 并使用这些引用传递给编译的 jrxml 文件,每次传递不同的 SetCollection 时,多次调用 JasperFillManager.fillReport()。 只是想知道编译后的 jrxml 文件是否会被最后一次调用填充,或者是否会有每次调用 JasperFillManager.fillReport() 的数据。

【问题讨论】:

  • 我已经观察到如何使用多个数据源的问题是我面临的许多问题。

标签: jasper-reports osgi


【解决方案1】:

这将被最后一个填充。您不能以这种方式使用多个数据源。尽管还有其他方法可以做到这一点。通过 param Map 传递 Collection 就是其中之一。

【讨论】:

  • 谢谢,我同意通过 param Map,但在 jrxml 设计中,我无法访问我在 param Map 中传递其集合的类的字段。
  • 假设 Profile 是我的班级,我通过参数映射传递集合 Set 或 ArrayList。在访问时,我能得到的只是收集方法,而不是 Profile 类的实际成员。如果我执行 $P{ProfileSet}.iterator().next().getName() 之类的操作,它会抛出类似 net.sf.jasperreports.engine.JRException:编译报告表达式类文件时遇到错误:1.方法 getFirstName() 未定义类型 Object value = ((java.util.Collection)parameter_PROFILE.getValue()).iterator().next().getFirstName(); //$JR_EXPR_ID=8$
  • 我想出了一个办法。我正在为不同的数据源生成不同的 pdf,并使用 JRPDFExporter 合并它们。我现在面临的唯一问题是当 JRPDFExporter 加入两个 jasperprints 时,它不会删除空白空间。我的意思是下一个 JasperPrint 对象 PDF 生成从新页面开始,前一页半填充。
  • 使用 JasperReports,您可以在主报告中使用子报告,我认为它会解决您的问题。为您想要的每个集合创建一个子报表,并将它们像数据源一样添加到每个集合中(不是在 java 代码中,在 ireport 中)。这些问题中有些东西:stackoverflow.com/questions/11451493/…stackoverflow.com/questions/11517748/…
  • 我很欣赏这种逻辑,但在您的第一个链接中,我们必须将子报表作为参数传递。我们必须在主报告中创建一个参数。但是参数类型呢?我的意思是对象不在下拉列表中。它表明它可以是 collection/set/io.InputStream 或其他 java 原语
【解决方案2】:

终于!!... 完成了任务。 感谢@Vycuss,因为我只使用子报告实现了它。

mainreport = JasperCompileManager.compileReport(//path of mainreport.jrxml);
subreport = JasperCompileManager.compileReport(//path of subreport.jrxml);
Map<String, Object> params = new HashMap<String, Object>();
params.put("SUB_REPORT", subreport);
params.put("DATA_SOURCE", empService.getEmpProject());

jprint1 = JasperFillManager.fillReport(mainreport,params,new JRBeanCollectionDataSource(empService.getEmpBean()));
JasperExportManager.exportReportToPdfFile(jprint1, "C://Test.pdf");

方法: 在 Activator.java 中的上述代码之后,我正在创建一个 OSGi 包。 在 MainReport.jrxml 中创建两个参数 第一个是没有类型的“SUB_REPORT”,第二个是具有 java.util.collection 类型的“DATA_SOURCE”。 现在在 MainReport 中提供 新的 net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{DATA_SOURCE}) 作为放置在详细信息带中的子报表元素的数据源表达式。 还要确保子报表只有列标题、详细信息和列页脚区域。 子报告中的字段也将为相应的 javabean 成员创建。

【讨论】:

  • 不客气。如果我的回答/cmets对你有帮助,你可以投票作为你选择的答案。
  • @Nilesh:您在总页码方面遇到过任何问题吗?我正在使用相同的程序,但我的总页数没有更新,因为两者都是不同的报告。请告诉我你是如何克服它的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多