iText 7:将呈现的段落高度

我可以按如下方式设置新段落的宽度,这会产生一定的高度:

Paragraph p = new Paragraph("some longer text some longer text some longer text"); p.setWidth(100); System.out.println("height " + p.getHeight()); document.add(p); 

当然p.getHeight()null ,因为渲染高度是在渲染PDF文件期间计算的。 但是我需要在最终渲染之前的高度。 我怎样才能最有效地获得它?

要获得段落的有效宽度,就好像它已经在页面上绘制一样,您需要从模型元素树创建渲染器树,然后布局最顶层的渲染器。 这是在代码中完成的:

 Paragraph p = new Paragraph("some longer text some longer text some longer text"); p.setWidth(100); // Create renderer tree IRenderer paragraphRenderer = p.createRendererSubTree(); // Do not forget setParent(). Set the dimensions of the viewport as needed LayoutResult result = paragraphRenderer.setParent(document.getRenderer()). layout(new LayoutContext(new LayoutArea(1, new Rectangle(100, 1000)))); // LayoutResult#getOccupiedArea() contains the information you need System.out.println("height " + result.getOccupiedArea().getBBox().getHeight()); 

请注意,计算的尺寸还将包括边距(默认情况下显示在段落中),因此如果要获得没有边距的高度,则应首先将段边距设置为0:

 p.setMargin(0);