繁体   English   中英

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

[英]Jasper Reports: showing images dynamically depending on field values

我正在使用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幅图像,因此要覆盖所有可能的可能性,而仅使用tag在它们之间不留空格将非常困难。

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

希望您能提供帮助,谢谢!

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

仅Field_Two

场一和场二

图层(静态)解决方案

  1. 将问题分成案例。 例如,案例1显示图像1,案例2显示图像2和3,案例3显示图像4等...
  2. 对于i至n(对于n种情况)
    • 创建案例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选择语句。
  5. 在详细信息部分中,添加一个Image元素,然后使用上面查询中的image字段将值设置为图片的路径。 例如, "C:/WINDOWS/Web/Wallpaper/"+$F{IMAGE}
  6. 转到原始报告,然后将子报告添加到您的详细信息部分。
    • 将原始报表中的字段链接到子报表中在#2中创建的参数。

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

示例生成的报告,使用WinXP壁纸作为图像

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM