在iText5中,当我们需要“ public float computeHeights(boolean firsttime)”时,可以获取PdfPTable的高度。
但是在iText7中,如何获取当前表格的高度值(尤其是在将表格添加到其父元素之前)?
我已经测试过“ table.getHeight()”方法,但是它返回空值。而且我还发现,在一个表渲染对象中我可以获取该值,但是局限性是当表添加到其父元素中时需要触发渲染,因此时间不是我的需要。
因为有时我们需要此值进行计算才能确定“ y轴”值。
在iText5,元件和关于他们的位置/大小信息是一个位混合在一起,允许你打电话calculateWidths
一个上PdfPTable
元件。
在iText7中,此功能是分开的,这为呈现/布局元素提供了不同类型的灵活性。
因此,Table
实例实例的模型元素对它们的位置或大小一无所知。调用table.getHeight
结果是null
因为table
之前没有HEIGHT
设置属性。
要计算桌子高度,必须使用渲染功能。
对于模型元素,您可以获取代表此模型元素及其所有子元素的渲染器的子树,以及layout
在任何给定区域中的子树。要真正知道表格的高度,您需要创建一个区域,该区域将足以放置元素的全部内容。
PdfDocument pdfDoc = ...
Document doc = ...
Table table = new Table(2)
.addCell(new Cell().add(new Paragraph("cell 1, 1")))
.addCell(new Cell().add(new Paragraph("cell 1, 2")));
LayoutResult result = table.createRendererSubTree().setParent(doc.getRenderer()).layout(
new LayoutContext(new LayoutArea(1, new Rectangle(0, 0, 400, 1e4f))));
System.out.println(result.getOccupiedArea().getBBox().getHeight());
上面的代码22.982422O
为我打印,但是结果可能会有所不同,具体取决于元素的配置和属性。
我想指出代码的两个重要部分:
考虑到这足以放置整个桌子,我们将其1e4f
作为的高度传递LayoutArea
。请注意,如果无法将桌子放到该高度,则结果将永远不会超过该给定高度,因此对于您的用例而言,它是不正确的(知道桌子的总高度)。因此,请确保传递足以放置整个桌子的高度。
.setParent(doc.getRenderer())
该部分在这里很重要,用于检索继承属性。请注意,我们没有为table
元素设置很多属性,甚至没有为字体设置任何属性,但是此信息对于了解此元素将占用的区域至关重要。因此,此信息将在期间从父链继承layout
。您可以通过更改文档的字体:document.setFont(newFont);
或字体大小:document.setFontSize(24);
并观察由此产生的高度变化来进行测试
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句