JasperReport:细节乐队的目的

时间:2011-12-05 16:06:44

标签: java jasper-reports

我认为这将是一个非常好的记录,因为它是JasperReports的核心主题,但我无法在任何地方找到答案。

详情频段的目的/功能/意图是什么?它应该只是报告的核心部分还是核心部分?

从另一个问题可以看出,细节带和JRDatasource提供的记录/ bean之间存在1:1的关系。这一启示揭示了一些切线问题:

  • 可以用Java编程方式添加细节带;如果你指定更多/更少的细节带(以编程方式)而不是JRDataSource返回的记录/ bean会发生什么?
  • 细节带之间的关系是什么,比如导出的PDF文档中的页面是什么? 1个细节带是否翻译成1页?
  • 如果您通过JasperFillManager null数据来源会怎样?是否仍有细节带?

我不想一次提出多个问题,但这些问题是如此相似 - 我宁愿一次性完成所有这一切,而不是因为多个几乎相同的问题而混乱。提前谢谢。

5 个答案:

答案 0 :(得分:9)

详细信息带确实是报告数据源的每个元素的带。报告引擎自动遍历数据源,并使用数据源的相应元素将数据插入到详细信息带的模板中。

您当然可以在一个页面上拥有多个元素。根据乐队的属性(允许分割,高度等),分页将由Jasper Reports自动处理,因此引擎将决定每页上打印的元素数量,何时转到下面页面等。

如果数据源中没有任何内容,则不会打印详细信息带。其他频段的打印取决于报告的参数。

答案 1 :(得分:3)

详细信息band的目的是为您提供放置和配置报表元素的模型。我不认为bean和detail band之间的关系是一对一的,因为你可以在一个bean中放置许多bean属性元素。所以,我会说细节带与报告bean元素的集合紧密相关。

但有一个区别是,细节带的功能与您通过JRDataSource提供的bean /记录数量无关。细节带将遍历所有这些,直到数据源被“消耗”。

此外,我个人觉得细节带允许您遍历bean属性集合非常有用。因此,在继续前进之前,在细节范围内放置几个属性将遍历所有属性。

如果您将null作为DataSource传递,则不会获得有关该报告的任何数据,只会显示static个文字。

答案 2 :(得分:0)

我记得,你可以看到详细信息带作为报告中行/记录的“模型”。对于JRDatasource提供的每条记录,您在详细信息区域内放置的所有元素都将重复。

例如,您的详细信息区域可能包含两个文本字段,一个值为$ {companyName},另一个值为$ {revenue}。

如果您现在将报告三行传递,那么将对每个行评估“companyName”和“revenue”,您可能会得到以下内容:

|Apple              |  $1000,000,000|
|Microsoft          |   $500,000,000|
|My amazing company |            $12|

即,细节带内容已重复三次。

所以: - 如您所见,您可能只需要配置一个细节带。不确定JRXML中是否允许有多个。 - 细节带和页面之间没有关系。分页是单独处理的。 - 说实话,不确定。我最好的猜测是异常,或者你没有得到细节带应该呈现的行。

答案 3 :(得分:0)

你误解了一个细节乐队是什么。

将为您的数据源中的每个元素打印报告的详细信息区域。如果使用数据库数据源,则详细信息将按行与结果集一起打印多次。如果您使用JRBeanCollection数据源,则详细信息区域将与项目中的项目一起打印多次。

回答你的问题:

  1. 您无法指定多个详细信息频段,这是非法的。您可以 为此目的使用子报告。

  2. 报告将每页输出尽可能多的细节带。另一方面,您可以使细节带与所需报告的高度相同     输出将是(减去页眉/页脚/等高度)。如果要在A4纸上打印报告     可以使你的细节带高297毫米(考虑到你没有其他乐队)。然后每个细节带都会     打印在一个单独的页面中。

  3. 如果传递空数据源,将生成报告     没有页面。

答案 4 :(得分:0)

您所拥有的信息是正确的,您只是对它的含义略有误解。

1:1的关系是在填充时间;报告填写完毕后,数据集中的每条记录都会有一个详细的带。在设计报告时,您只需添加一次波段,但在填写报告时反复重复该波段。

您可以根据需要添加任意数量的细节带。每个波段与数据集记录具有1:1的关系,并且在移动到下一个记录之前填充所有细节波段(即,如果您有三个波段A,B和C;它们在报告中的顺序将是是ABCABC ......不是AAA ...... BBB ...... CCC ......)。

  • 可以通过编程方式添加频段,但需要注意的重点是,您要在报告设计中添加频段,而不是已完成的报告。因此,正如jrxml设计一样,您可以添加一次带,并为每条记录重复一次。 Check this example

  • 报告页面和细节带之间没有关系。报告填充程序将尽可能多地放在页面上,同时尊重每个频段的splitType以及其他报告属性。

  • 是否允许传递空数据源?在任何情况下,1:1关系仍然有效:具有0条记录的数据集在报告中产生0个细节带。