1

我正在使用 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 仅

第一场和第二场

4

1 回答 1

3

图层(静态)解决方案

  1. 将问题分解为案例。例如,案例 1 显示图像 1,案例 2 显示图像 2 和 3,案例 3 显示图像 4 等等......
  2. 对于 i 到 n(对于 n 个案例)
    • 为案例 i 创建所有元素。
    • 添加一个新层,第 i 层。如果“图层”窗口被隐藏,请转到“窗口”>“图层”。
    • Select the elements added, right click and Send to layer. Choose layer i.
    • Right click on the layer in the Layers window and update the Print When Expression. For example, $F{Field_ONE} != null
    • Repeat. FYI, you can click on the eye on the layer (in the Layers window) to hide the applicable elements to hide the clutter.
  3. Done, each design you made for each case will only appear when the Layer's print when expression yields true.

Subreport (dynamic) Solution

  1. Create a report, lets call it subreport.
    • Set the width and height of the page to be the height and width of your image section for a given record.
    • Set the all of the page margins to 0
    • Change the column of the report to the number of images you'd like to have in a single row.
    • Change the print order to 'Horizontal'
  2. Add N parameters for the N field that needs to be associated with an image.
  3. Remove all the bands in the page except for the detail band.
  4. Write a dummy query that will return an image name depending on whether a given field is null or not. For example, select 'Ascent.jpg' as image from dual where $P{FIELD_1} is not null. You need to do this for each field and union all the select statements.
  5. In the detail section, add an Image element and set the value to be the path to your picture using the image field from the query above. For example, "C:/WINDOWS/Web/Wallpaper/"+$F{IMAGE}.
  6. Go to your original report and add the subreport to your detail section.
    • Link the fields in the original report to the parameters, created in #2, in the subreport.

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

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

于 2012-06-13T07:04:28.827 回答