如何实现动态细节带高度(取决于文本长度)?

How to achieve dynamic detail band height (depending on text length)?

我在寻找解决方案时遇到了一些问题。

在我的报表中,我有一个子报表,其功能是打印与我正在打印的文档相关的人员的姓名。

该子报表只有一个 文本字段,其中姓名和姓氏是从 Java 代码导入的。

问题是每当名字和姓氏太长无法在一行中打印时,我必须在第二行中打印完。

我尝试了两种方法来解决这个问题(请忽略其他字段,nameAndSurname 是相关的一种):

1. 具有适合两条线高度的单个细节带。

2. 双细节带。通过Java代码,我把二姓切下来导入到二姓字段中。第二个细节仅在条件 (nameAndSurnameTwo!=null) 为真时打印。


我还没有找到解决方案。问题是,无论是否打印第二行,detail band 都会一直占用第二行 space。

在简历中,我需要的是一个 band,它可以根据我必须打印的名字和姓氏的长度动态改变它的高度。如果这些很短,只是一行。只是名字和姓氏的长度太长,必须占用两行spaces.

这通常可以通过使用 isStretchWithOverflow

来解决

解决方案是使用: 具有适合 one 行高度的单个细节带。将 textField 的属性设置为 isStretchWithOverflow="true"

例子

<detail>
    <band height="20">
        <textField isStretchWithOverflow="true">
            <reportElement stretchType="RelativeToTallestObject" x="0" y="0" width="133" height="20" uuid="728a0280-ae29-425a-ab57-3ac78855de58"/>
            <textFieldExpression><![CDATA[$F{nameAndSurname}]]></textFieldExpression>
        </textField>
    </band>
</detail>

我还建议在所有其他 textElements 上使用 stretchType="RelativeToTallestObject",以便它们在您的 textField 溢出时也能拉伸。

此外,如果你喜欢强制拉伸,例如你希望姓氏显示在第二行,只需添加 \n 示例 Petter\nFriberg 或使用 html <br/> 将标记设置为 html.