在DynamicReports中,如何设置报表元素的绝对坐标

时间:2012-05-02 14:02:57

标签: jasper-reports dynamic-reports

在JasperReports中,您始终为定位报告元素设置绝对x和y坐标。例如,以下示例 渲染一个黑色矩形(左上角为(0,0)),其中包含一个白色文本字段“Hello World”,从x = 70开始:

<rectangle>
    <reportElement x="0" y="0" width="557" height="20" backcolor="#000000" />
    <graphicElement fill="Solid">
        <pen lineWidth="0"/>
    </graphicElement>
</rectangle>

<textField>
    <reportElement x="70" y="2" width="100" height="14" style="pageLayoutFont"/>
    <textElement textAlignment="Left" verticalAlignment="Middle" />
    <textFieldExpression class="java.lang.String">
        <![CDATA["Hello World"]]>
    </textFieldExpression>
</textField>

现在,我希望使用DynamicReports实现相同的目标。它应该与此类似:

report().addDetail(
    cmp.rectangle()
       .setDimension(557, 20).setStyle(...),
    cmp.text("Hello World").setStyle(...)   
);

但是,我找不到确定定位的方法(在上面的Java示例中,文本呈现在矩形下方,而不是在内。

1 个答案:

答案 0 :(得分:1)

对于这种特殊情况(矩形作为文本字段的周围框),可以使用horizontalList s。水平列表具有矩形作为背景(颜色)并具有固定尺寸。要将文本移动到y = 2,您可以添加一个薄gap元素(相同宽度)作为第一个水平列表包含,然后附加newRow。然后,文本字段 Hello World 附加第二个带有= 70的间隙。或者,您可以省略间隙并在文本字段中添加填充样式。

cmp.horizontalList()
    .setFixedDimension(557, 20)
    .setBackgroundComponent(...)
    .add(
        //1. a thin gap element
        cmp.gap(557,2)
    )
    .newRow()
    .add
    (
        //2. a gap of width 70
        cmp.gap(70,13),
        //3. the text field
        cmp.text("Hello World").setStyle(...)
    )

虽然这适用于这种情况,但它是一种间接的方法,很容易让人感到困惑。此外,我想知道你能想到的每个定位任务是否都有解决方案。