我正在使用BIRT报告,在xml formate中生成它我正在编写发射器(BIRT插件)。我需要一个xml报告,其中包含一些基于同一报告中某些部分的重复部分。我正在使用subReports。所以报告结构就像
List--
Header--
Table---(No header and footer)
details---
Cell----
Text(Multiple text here) Some static section and dynamic data
List Details ----
Table--(No header and footer)(This table will be repeated for every record in the header part)
Details--
Cell --
Multiple Text elements ()`
List Footer---- Empty
在编写发射器时,我需要提取主要在Cell元素中的所有文本元素的内容。现在以下是我的发射器中sartCell方法的代码。
public void startCell(ICellContent arg0) {
System.out.println("text in Cell:: ");
System.out.println("text in Cell:: " + arg0.getInstanceID());
for(Object ie : arg0.getChildren())
{
if(ie instanceof LabelContent)
{
LabelContent lc = (LabelContent)ie;
stringBuilder.append(lc.getText());
System.out.println(lc.getText());
}
else if(ie instanceof ForeignContent)
{
ForeignContent fc = (ForeignContent)ie;
stringBuilder.append(fc.getRawValue());
System.out.println(fc.getRawValue());
}
}
}
我可以使用此逻辑访问Cell及其所有文本内容。但我想对List的Details部分中Table的所有单元格做同样的事情。 问题是详细信息部分中的单元格在ICellContent.getChildren()上为null。
是的,我的startText方法根本没有被调用。以下是我的发言人的声明,
公共类XmlEmittor扩展了ContentEmitterAdapter {...}
以下是rptDesign结构,
<List>
<Header>
<Table><Detail><Cell><Text>...DynamicText....</Text>.....</Table>
</Header>
<Detail>
<Table><Detail><Cell><Text>...DynamicText....</Text>.....</Table>
</Detail>
</List>
在上面的结构中我的文本元素本身是用XML结构引导我想生成报告。所以我只想附加我的xml的所有内容并将其写入outputstream。请提醒,提前致谢
答案 0 :(得分:0)
如果是 Text 元素,
public void startText(ITextContent text)
或
public void startData(IDataContent data) throws BirtException
将被调用但是动态文本元素
public void startForeign(IForeignContent foreign) throws BirtException
将被召唤。
您可以使用以下代码段来获取动态文本值
@Override
public void startForeign(IForeignContent foreign) throws BirtException {
Object rawValue = foreign.getRawValue();
}