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

时间:2012-06-13 06:48:35

标签: java jasper-reports ireport

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

即。有两个图像: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 only

Field one and two

1 个答案:

答案 0 :(得分:2)

图层(静态)解决方案

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

    1. 创建报告,我们称之为子报告。
      • 将页面的宽度和高度设置为给定记录的图像部分的高度和宽度。
      • 将所有页边距设置为0
      • 将报告的列更改为您想要在一行中拥有的图像数。
      • 将打印指令更改为“水平”
    2. 为需要与图像关联的N字段添加N个参数。
    3. 删除页面中除细节带以外的所有条带。
    4. 根据给定字段是否为空,编写将返回图像名称的虚拟查询。例如,select 'Ascent.jpg' as image from dual where $P{FIELD_1} is not null。您需要为每个字段执行此操作,并union all选择语句。
    5. 在详细信息部分中,添加一个Image元素,并使用上面查询中的image字段将值设置为图片的路径。例如,"C:/WINDOWS/Web/Wallpaper/"+$F{IMAGE}
    6. 转到原始报告,并将子报告添加到详细信息部分。
      • 将原始报告中的字段链接到子报告中#2中创建的参数。
    7. 在我测试之前,我不想发布此解决方案。如果有不清楚的地方,我可以发布我的样本,它有很多行。您需要子报表的原因是因为您的主报表有1列并垂直填充,但您需要将图像水平填充多列。对于非null的每个字段,子报表查询将按语句顺序返回记录。然后将在各列中填充记录。

      Sample Generated Report, using WinXP wallpapers as images