计算iText 7中table的宽度

Calculate the width of a table in iText 7

我将 iText 7html2pdf 2.1.2 版本一起使用,并尝试将 HTML 文件转换为 PDF。

我使用 HtmlConverter#convertToElements 来处理 html 文件。然后我想计算其中一个元素的宽度(特别是 table)。

我尝试实现自定义 TagWorker class,但只有在填充后我才得到 table。

也尝试了 convertToDocument 和其他一些方法,但没有成功。

有没有办法在 运行 时获得 table 宽度?

提前致谢。

坏消息:一般来说,在 table 被放置之前不可能得到它的真实宽度。这在很大程度上取决于布局区域。

好消息:可以模拟table的布局,查看占用的地方:

    Rectangle area = new Rectangle(0, 0, 500, 500);
    LayoutResult result = table.createRendererSubTree().setParent(doc.getRenderer()).layout(new LayoutContext(new LayoutArea(0, area)));
    Rectangle tableArea = result.getOccupiedArea().getBBox();

在上面的代码中,我为 table (createRendererSubTree()) 创建了一个渲染器,设置了它的父级(setParent(doc.getRenderer()) - 这一行对于正确的属性处理很重要)并对其进行布局 (layout(new LayoutContext(new LayoutArea(0, area)));

UPD:我已经阅读了您最初的问题并为您提供了另一个解决方案。 假设您没有任何区域可以放置,但想看看 space 和 table 可以占据多少。

然后使用下一个片段:

MinMaxWidth minMaxWidth = ((TableRenderer)table.createRendererSubTree().setParent(doc.getRenderer())).getMinMaxWidth();
float minWidth = minMaxWidth.getMinWidth();
float maxWidth = minMaxWidth.getMaxWidth();

在上面的代码中,我计算了 table 的最小和最大宽度。