2012-06-13 39 views
1

我使用碧玉报告和iReport的生成我的应用程序的报告。我需要在我的报告中显示图像,这取决于我的数据库上的查询。这些图像的计划,并将代表测量内的其他领域等碧玉报告:显示动态图像根据字段值

I.E.有两个图像:连接到Field_ONE和Field_TWO的IMAGE1和IMAGE2。

  • 如果Field_ONE为!= null,那么我希望显示IMAGE1和文档中的图像内的字段;

  • 如果Field_TWO是!= null且Field_ONE等于空的话,我想显示IMAGE2在以前表明IMAGE1

    的地方
  • 如果Field_TWO是!= null并且Field_ONE!= null,则我想并排显示IMAGE1和IMAGE2。

注意,我可能有5幅或6个图像,所以这将是非常难以覆盖不留只使用标签之间的空格做好一切准备。

简而言之:我需要这样的东西在Android的布局,我可以在我加入计划的顺序添加动态视场的计划,并生成图像及其相关领域。

我希望你能帮忙,谢谢!

注:我可以根据该报告的结果相同类型的多个图像,所以它与层

Field_Two only

Field one and two

回答

2

层几乎不可能覆盖它(静态)解决方案

  1. 将问题划分为案例。例如,壳体1个显示图像1,壳体2倍显示的图像2和3,壳体3显示图像4等...
  2. 对于i到n(对于n例)
    • 创建情况下,所有的元素我。
    • 添加一个新层,第i层。如果“图层”窗口处于隐藏状态,请转到“窗口”>“图层”。
    • 选择添加元素,右击并Send to layer。选择图层我。
    • 右键单击“图层”窗口中的图层并更新“打印时的打印格式”。例如,$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。您需要为每个字段和选择语句执行此操作。
  5. 在详细部分中,添加的图像元素和设置的值使用从上述查询的image字段设置为路径到您的图片。例如,"C:/WINDOWS/Web/Wallpaper/"+$F{IMAGE}
  6. 转到您的原始报告并将子报告添加到您的详细信息部分。
    • 链接到参数,#2创建的原始报表中的字段,在报表。

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

Sample Generated Report, using WinXP wallpapers as images

+0

我忘记说了一些关于图片:我可以有相同的字段的多个图像。想象一下,我有3个相同类型的对象,然后它会显示3个图像。 这就是为什么我想在Java中尽可能实现像List一样的原因。当我用真实数据生成报告时,我需要添加图像。 谢谢 – R5498

+0

嗯,我展示的解决方案,重要的是它,你知道所有的情况下适用的元素(文本框和图像),当您正在开发的报告。这是因为您可以将任意数量的元素添加到图层中。但是,如果在开发报告后可能会为特定案例添加更多图片,请让我知道,我会提出另一种解决方案。 – user845279

+0

但是,我注意到如果你有一堆字段,案例数量会相当大。 – user845279