JasperReport:详细信息频段的目的

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

细节乐队的目的/function/意图是什么? 它应该只是报告的核心部分还是核心部分?

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

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

我不想一次提出多个问题,但是这些问题是如此相似 – 我宁愿一次性完成这一切,而不是用多个几乎完全相同的问题弄乱SO。 提前致谢。

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

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

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

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

但有一点不同的是,细节带的function与您通过JRDataSource提供的bean /记录JRDataSource 。 细节带将遍历所有这些,直到数据源被“消耗”。

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

如果您将null作为DataSource传递,则不会在报表上获得任何数据,只会显示static文本。

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

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

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

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

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

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

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

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

回答你的问题:

  1. 你不能指定多个细节带,这是非法的。 您可以使用子报表来实现此目的。

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

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

你掌握的信息是正确的,你只是对它的含义有一点误解。

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

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

  • 可以通过编程方式添加波段,但需要注意的重要一点是,您要在报表设计中添加波段,而不是已完成的报表。 因此,就像使用jrxml设计一样,您可以添加一次波段,并为每条记录重复该波段。 检查此示例 。

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

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