2

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

<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 示例中,文本呈现在矩形下方,而不是在矩形内。

4

1 回答 1

1

对于这种特殊情况(一个矩形作为文本字段的周围框),可以使用horizontalLists. 水平列表将矩形作为背景(颜色)并具有固定尺寸。要将文本移动到 y=2 您可以添加一个细gap元素(相同宽度)作为第一个水平列表包含,然后附加一个newRow. 然后,在文本字段Hello World后面加上 with=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(...)
    )

虽然这适用于这种情况,但它是一种间接方法,很容易让人混淆。此外,我想知道是否有针对您能想到的每一项定位任务的解决方案。

于 2012-05-03T07:20:38.403 回答