报告包含一个独特的中央“ Detail1”带,该带必须适合整个页面的高度(即使数据源仅提供一条记录),页脚也必须保留在A4尺寸页面的底部:
_______________
| header |
| |
| row1 |
| row2 |
| |
| |
| |
| |
| |
| footer |
|_______________|
YES!
_______________
| header |
| |
| row1 |
| row2 |
| footer |
|_______________|
NO!
我想知道这是否与“拉伸”选项或背景有关。
我们还存在一个相对更普遍的问题,即相对于页面高度垂直调整某些带或内容的大小。在您的情况下,可以这样做,例如,通过增加row2
“底边距”或footer
“顶边距”(或在它们之间引入一些“间隔元素”):
variant A variant B variant C
___________ __________ __________
| header | | header | | header |
|_________| |________| |________|
| row1 | | row1 | | row1 |
|_________| |________| |________|
| row2 | | row2 | | row2 |
| . | |________| |________|
| . | | . | | spacer |
|_________| | . | |________|
| footer | | footer | | footer |
|_________| |________| |________|
我目前能想到的解决此问题的唯一方法是一种破解,如果“您对将要伸缩的元素同级的大小了解得足够多”:
我们想像这样设置spacer.height
(或边距取决于所选择的变体):
spacer.height = page.height - header.height - row1.height - row2.height - footer.height
为了简单起见,我们假设
row2.height
灵活(〜动态)为了简单起见,我们假设row2.height
这样的数字由换行符分隔,如下所示:
17
2
34
使用variant A
我们可以手动测试,在页脚将被压入下一页后,假设有多少个换行符/数字5
。
所以我们要做的就是
row2
到max( 0, 5 - row2LinefeedsCount * row2lineHeight )
(例如,经由Groovy的或Java) -- (Oracle SQL)
select
...,
dyn_row2_col
-- add additional linefeeds if necessary (when < 5 lines)
-- (counts by the content length after removing all digits)
|| lpad(
'',
max( 0, 5 - length( regexp_replace( dyn_row2_col, '\d', '' ))),
CHR(13) )
as dyn_row2_col,
...
from ...
另一个示例可能是row2
s的高度取决于某些查询结果的子行数并线性增加(例如,如果它是具有相等大小的行的简单子报告)。然后,我们也许可以使用variant C
和填写间隔(不可见),还有一些假的查询基础上,子行查询(和做休息空间的计算类似上面的例子)。
使条带高度适合页面尺寸/高度,条带高度为页面尺寸的100%,最大高度,垂直拉伸至100%父容器高度或页面尺寸
我发现在这种现代的Flex布局HTML /响应式布局中,无法轻松使用灵活的位置/大小表达式(例如,使页脚贴在底部,水平浮动元素(例如,表格列)或spacer.height: 75%
)时,很痛苦。世界。在这里应该加强绝对定位的哲学。Eclipse BIRT在这方面要好得多,但还有其他缺点。当然,实现可能会非常复杂,需要更多的内存,并且运行速度会更慢,但是我认为在非绝对定位要求的情况下,其好处是巨大的。
我写了一些通用的Scriptlet(我打算在jasper-utils中提供),它解决了基于相关列上命名组件样式(类似于CSS类)的水平列浮动问题。它的行为与HTML表格非常相似,它使用基于列特定百分比和“下溢-拉伸-计算”表达式的可用水平空间以及显示/隐藏列(在所有相关范围内)的可能性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句