java - 贾斯珀报告 : showing images dynamically depending on field values

标签 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. 将问题分成案例。例如,案例 1 显示图像 1,案例 2 显示图像 2 和 3,案例 3 显示图像 4 等等...
  2. 对于 i 到 n(对于 n 种情况)
    • 创建案例 i 的所有元素。
    • 添加一个新图层,图层 i。如果“图层”窗口隐藏,请转到“窗口”>“图层”。
    • 选择添加的元素,右键单击并发送到图层。选择层 i。
    • 右键单击“图层”窗口中的图层并更新“打印时表达式”。例如,$F{Field_ONE} != null
    • 重复。仅供引用,您可以单击图层上的眼睛(在“图层”窗口中)来隐藏适用的元素,以隐藏困惑。
  3. 完成,您为每种情况所做的每个设计只会在图层的打印表达式为 true 时出现。

子报表(动态)解决方案

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

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

Sample Generated Report, using WinXP wallpapers as images

关于java - 贾斯珀报告 : showing images dynamically depending on field values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41413652/

相关文章:

java - Android 滑动接听/拒接电话组件

java - 编译 jasper 报告时未解析的符号

MySQL 查询 - 包括没有记录的日期

java - 我正在尝试使用 jasper 报告开发 excel 页面

java - 在 iReport 中打印 When Expression

database - 显示少一条数据库记录的表格工具

java - 不兼容的类型 - 发现 void java.util.Optional

Java Double 对象初始化与其他 Number 类型对象

java - 无法使用 JPA 工具从数据库生成实体

java - 如何在 3 个示例中打印 jasper 报告且几乎没有任何变化?