Birt - 基于另一列值的图像或数据列

时间:2014-08-22 12:21:49

标签: java birt

我在birt报告中有一个表格,该表格绑定到数据集(来自CSV)。

在详细信息部分中,有几列通常只使用DataItem报表元素打印CSV中的值。现在我有一个基于该行中另一列的值的情况,那么该值实际上是一个图像。我通常只使用Image报表项,但是在计算列时我知道无法更改单元格中的报表项。

我已尝试在onCreate事件处理程序中执行某些操作,但我无权访问Java API中用于构建报表的单元格内容。

我还有哪些其他选项可以更改用于表示表格中数据的报表项目?

我甚至无法手动创建所有行,因为我不知道创建报表设计时会有多少行,这就是CSV的用途。

请帮助,我一直在谷歌搜索并盯着javadoc和参考几天而没有更接近找到解决方案。

例如,规则是如果A是X则B只是文本,但如果A是Y则B是图像。

======================
=  A   =   B         =
======================
=  X   =   42        =  
======================
=  Y   =   42.png    =
======================
=  Y   =   42.png    =
======================
=  X   =   42        =  
======================

1 个答案:

答案 0 :(得分:0)

将两个项目添加到计算列 B

CellHandle detailCell = (CellHandle) detailRow.getCells().get(INDEX_OF_COLUMN_B);
detailCell.getContent().add(createImage(factory));
detailCell.getContent().add(createDataItem(factory));

创建项目时,必须使用HideRule指定visibility属性,如下所示;

private ImageHandle createImage(ElementFactory factory) {
    ImageHandle image = factory.newImage(null);
    image.setURL("\"http://example.com/\" + row[\"B\"]  + \".png\"");
    HideRule rule = StructureFactory.createHideRule();
    rule.setFormat("all");
    rule.setExpression("row[\"A\"] == \"X\"");
    image.getPropertyHandle(IReportItemModel.VISIBILITY_PROP).addItem(rule);
    return image;
}

请注意,对于图像,表达式返回true,隐藏元素,因此在这种情况下,如果列 A 的值为 X ,则我们隐藏了图片。

将HideRule条件应用于数据项以隐藏显示图像时,即

rule.setExpression("row[\"A\"] == \"Y\"");

rule.setExpression("row[\"A\"] != \"X\"");

这很好但我只测试了PDF输出。

有关格式的详细信息,请参阅hide rule documentation

感谢@James Jenkins的评论,这些评论引导我找到解决方案以及他联系到的有用答案。