在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示例中,文本呈现在矩形下方,而不是在内。
答案 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(...)
)
虽然这适用于这种情况,但它是一种间接的方法,很容易让人感到困惑。此外,我想知道你能想到的每个定位任务是否都有解决方案。