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>
关键修改说明
- 外层容器高度设为0:将外层detail band、
<jr:listContents>、外层<componentElement>的height改为0,让JasperReport自动计算内容高度,避免固定高度限制伸展 - 修正内部元素定位:把内部问答项文本框的
y从17改为0,直接贴合顶部,移除多余空白 - 调整内部列表内容高度:内部
<jr:listContents>高度改为16(文本框15px+下划线1px),让每个问答项紧密排列 - 内部列表定位下移:将内部嵌套列表的
<componentElement>的y设为17,刚好对齐日期行的下划线下方,确保日期和第一个问答项无间隙
内容的提问来源于stack exchange,提问作者heef
相关产品推荐
相关产品推荐

