如何在Jasper Report页面末尾空白处填充*符号 消除页面留白
JasperReport 页面末尾空白填充星号实现方案
最终实现效果如下:
核心实现逻辑
利用JasperReport的带区拉伸特性和动态文本截断能力,适配内容行自动高度的场景,不需要提前计算内容高度,可自动填满最后一页末尾的空白区域。
实现步骤
1. 新增填充带区
- 在报表最后一个内容带区(通常为Detail带区、Summary带区之后)新增一个自定义带区,带区高度设置为1px,
Stretch Type属性设置为Relative to Page Height,Position Type设置为Float,保证带区可以自动延伸到页面底部。 - 若仅需要在最后一页填充星号,给该带区添加
Print When Expression:$V{PAGE_NUMBER} == $V{PAGE_COUNT},避免所有页面都生成填充效果。
2. 添加填充文本框
- 在刚才新增的填充带区中插入一个文本框,宽度与页面内容宽度一致,文本框属性设置:
Stretch With Overflow:trueStretch Type:Relative to Band Height
- 文本框内容表达式按以下两种方式二选一即可:
方式1:依赖commons-lang包(更灵活)
先在报表的导入配置中添加导入:import org.apache.commons.lang3.StringUtils;
文本表达式写为:StringUtils.repeat("*", 5000)
数字可根据最大页面空白长度调整,只要保证总长度超过最大可能的空白区域即可,超出带区的部分会自动被截断。方式2:无依赖实现
手动拼接足够长的星号字符串即可:
同样保证总长度足够覆盖最大空白区域即可。"****************************************************************************************************" + "****************************************************************************************************" + "****************************************************************************************************" + "****************************************************************************************************"
3. 适配自动行高配置
- 所有内容行所在的Detail带区全部设置
Position Type为Float,保证内容行自动撑开高度时,后续的填充带区会自动下移,不会和内容重叠。 - 检查页面边距配置,确保填充带区的宽度和内容区域宽度一致,避免星号超出页面或者左右留白不均。
内容的提问来源于stack exchange,提问作者Felipe Ortmeyer
相关产品推荐
相关产品推荐

