【问题标题】:Jasper Reports: showing images dynamically depending on field valuesJasper Reports:根据字段值动态显示图像
【发布时间】:2012-06-13 06:48:34
【问题描述】:

我正在使用 Jasper Reports 和 iReport 来生成我的应用程序的报告。我需要根据数据库上的查询在报告中显示图像。图像是平面图,内部还有其他字段表示测量值等。

I.E.有两个图像: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 中的布局,我可以在其中根据字段动态添加计划,并按照我添加计划的顺序生成图像及其相关字段。

希望你能帮忙,谢谢!

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

【问题讨论】:

    标签: java jasper-reports ireport


    【解决方案1】:

    图层(静态)解决方案

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

    子报表(动态)解决方案

    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 列并且垂直填充,但您需要图像在多列中水平填充。对于每个不为空的字段,子报表查询将按语句顺序返回一条记录。然后将在各列中填充记录。

    【讨论】:

    • 我忘了对图像说些什么:我可以拥有多个同一领域的图像。想象一下,我有 3 个相同类型的对象,然后它会显示 3 个图像并排显示。这就是为什么我想尽可能在​​ Java 中像 List 一样实现它。当我使用真实数据生成报告时,我需要动态添加图像。谢谢
    • 好吧,对于我展示的解决方案,重要的是您在开发报告时了解所有案例和适用元素(文本字段和图像)。这是因为您可以向图层添加任意数量的元素。但是,如果在您编写报告后可能会为给定案例添加更多图片,请告诉我,我会建议另一种解决方案。
    • 但是,我注意到如果你有一堆字段,那么案例的数量会很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多