Jasper Reports:根据字段值动态显示图像

我正在使用Jasper Reports和iReport来生成我的应用程序的报告。 我需要根据对数据库的查询在报告中显示图像。 图像是计划,其他字段代表测量等。

IE有两个图像:IMAGE1和IMAGE2链接到Field_ONE和Field_TWO。

  • 如果Field_ONE是!= null,那么我想在文档中显示IMAGE1和图像内的字段;

  • 如果Field_TWO是!= null并且Field_ONE等于null,那么我想在之前显示IMAGE1的地方显示IMAGE2

  • 如果Field_TWO是!= null而Field_ONE!= null,那么我想并排显示IMAGE1和IMAGE2。

请注意,我可能有5或6个图像,因此很难覆盖所有可能性,而不会仅使用标记在它们之间留下空白。

简而言之:我需要类似Android中的布局,我可以根据字段动态添加计划,并按照添加计划的顺序生成图像及其相关字段。

希望你能帮忙,谢谢!

注意:根据报告的结果,我可能有多个相同类型的图像,因此几乎不可能用图层覆盖它

Field_Two只

第一和第二场

图层(静态)解决方案

  1. 将问题分成几个案例。 例如,案例1显示图像1,案例2显示图像2和3,案例3显示图像4等…
  2. 对于i到n(对于n个案例)
    • 为case i创建所有元素。
    • 添加一个新图层,即图层i。 如果隐藏了“图层”窗口,请转到“窗口”>“图层”。
    • 选择添加的元素,右键单击Send to layer 。 选择第i层。
    • 右键单击“图层”窗口中的图层,然后更新“表达时打印”。 例如, $F{Field_ONE} != null
    • 重复。 仅供参考,您可以单击图层上的眼睛(在“图层”窗口中)隐藏适用的元素以隐藏杂乱。
  3. 完成后,每个案例的每个设计只会在表达式为true时打印图层时出现。

子报告(动态)解决方案

  1. 创建一个报告,我们称之为子报告。
    • 将页面的宽度和高度设置为给定记录的图像部分的高度和宽度。
    • 将所有页边距设置为0
    • 将报告列更改为您希望在一行中拥有的图像数。
    • 将打印顺序更改为“水平”
  2. 为需要与图像关联的N字段添加N个参数。
  3. 删除页面中除细节带以外的所有条带。
  4. 编写一个虚拟查询,根据给定字段是否为空,返回图像名称。 例如, select 'Ascent.jpg' as image from dual where $P{FIELD_1} is not null 。 您需要为每个字段执行此操作并union all select语句。
  5. 在详细信息部分中,添加一个Image元素,并使用上面查询中的image字段将值设置为图片的路径。 例如, "C:/WINDOWS/Web/Wallpaper/"+$F{IMAGE}
  6. 转到原始报告,并将子报告添加到详细信息部分。
    • 将原始报告中的字段链接到子报告中#2中创建的参数。

在我测试之前,我不想发布此解决方案。 如果有不清楚的地方,我可以发布我的样本,它有很多行。 您需要子报表的原因是您的主报表有1列并垂直填充,但您需要将图像水平填充多列。 对于非null的每个字段,子报表查询将以语句顺序返回记录。 然后将在列中填充记录。

样本生成报告,使用WinXP壁纸作为图像