当前位置:  开发笔记 > 编程语言 > 正文

在iText7中,有没有像iText5的calculateHeights方法?

如何解决《在iText7中,有没有像iText5的calculateHeights方法?》经验,为你挑选了1个好方法。

在iText5中,当我们需要"public float calculateHeights(boolean firsttime)"时,我们可以获得PdfPTable的高度.

但是在iText7中,我们如何获得当前表高度值(特别是在将表添加到其父元素之前)?

我已经测试了"table.getHeight()"方法,但它返回null.而且我还发现在表渲染对象中我可以得到这个值,但是限制是当表添加到其父元素时需要触发渲染,所以时间不是我需要的.

因为有时我们需要这个值来计算来决定"y轴"值.



1> Alexey Subac..:

在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);并观察结果的高度变化

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有