You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JasperReport:<jr:listContents>元素间意外空白问题求助

JasperReport嵌套列表出现意外空白的解决方法

问题根源

你的嵌套列表出现"幽灵空白",核心原因是布局高度限制和元素定位错误:

  • 外层<jr:listContents>固定高度17px,完全无法容纳内部嵌套列表的内容,渲染时会强制预留空白区域
  • 内部问答项的文本框设置了y="17",人为在每个问答项顶部制造了空白
  • 外层detail band高度固定,没有开启自适应伸展

修改后的代码

替换原有的detail band及内部列表部分:

<detail>
  <band height="0" splitType="Stretch">
    <componentElement>
      <reportElement x="0" y="0" width="505" height="0" isRemoveLineWhenBlank="true" />
      <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
        <datasetRun subDataset="SurveyListDataSet">
          <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{surveyDataList})]]></dataSourceExpression>
        </datasetRun>
        <jr:listContents height="0" width="505">
          <textField isStretchWithOverflow="true">
            <reportElement style="report_value_bold" x="110" y="0" width="265" height="15" />
            <textElement textAlignment="Left" />
            <textFieldExpression><![CDATA[$F{surveyDate}]]></textFieldExpression>
          </textField>
          <line>
            <reportElement style="line_light" x="105" y="16" width="400" height="1"/>
          </line>
          <componentElement>
            <reportElement x="0" y="17" width="505" height="0" isRemoveLineWhenBlank="true" positionType="Float"/>
            <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
              <datasetRun subDataset="SurveyDataSet">
                <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{surveyList})]]></dataSourceExpression>
              </datasetRun>
              <jr:listContents height="16" width="505">
                <textField isStretchWithOverflow="true">
                  <reportElement style="report_value" x="125" y="0" width="265" height="15" positionType="Float" />
                  <textElement textAlignment="Left" />
                  <textFieldExpression><![CDATA[$F{question}]]></textFieldExpression>
                </textField>
                <textField isStretchWithOverflow="true">
                  <reportElement style="report_value_bold" x="300" y="0" width="195" height="15" isRemoveLineWhenBlank="true" positionType="Float" />
                  <textElement textAlignment="Right" />
                  <textFieldExpression><![CDATA[$F{response}]]></textFieldExpression>
                </textField>
                <line>
                  <reportElement style="line_light" x="105" y="15" width="400" height="1" positionType="FixRelativeToBottom" />
                </line>
              </jr:listContents>
            </jr:list>
          </componentElement>
        </jr:listContents>
      </jr:list>
    </componentElement>
  </band>
</detail>

关键修改说明

  1. 外层容器高度设为0:将外层detail band、<jr:listContents>、外层<componentElement>的height改为0,让JasperReport自动计算内容高度,避免固定高度限制伸展
  2. 修正内部元素定位:把内部问答项文本框的y从17改为0,直接贴合顶部,移除多余空白
  3. 调整内部列表内容高度:内部<jr:listContents>高度改为16(文本框15px+下划线1px),让每个问答项紧密排列
  4. 内部列表定位下移:将内部嵌套列表的<componentElement>的y设为17,刚好对齐日期行的下划线下方,确保日期和第一个问答项无间隙

内容的提问来源于stack exchange,提问作者heef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:05:21