如何在段落级别分页?

How to break page at paragraph level?

如何在段落级别开始一个新页面?我知道我可以在文档级别执行此操作,但这会破坏我的格式设置。

也许有根据字体和字体大小查找页面上剩余行的功能?

你绝对可以做到这一点。 但它需要一些关于 iText 如何呈现其内容的知识。

在内部,渲染 Paragraph 对象时,它使用 ParagraphRenderer。每个 ParagraphRenderer 都有一个或多个 LineRenderer 对象作为其子对象。同样,每个 LineRenderer 都有一个或多个 TextRenderer 个对象。

为了获得有关段落分割位置的信息,您可以要求 Paragraph 对象针对给定的 LayoutContext 对象(包含可用 space,以及其他一些有用的信息),然后取回 LayoutResult

LayoutResult就能告诉你Paragraph was split.

试试下面的代码。 w表示可用宽度 h表示可用高度

Rectangle layoutRect = new Rectangle(w,h);
LayoutArea layoutArea = new LayoutArea(1,layoutRect);
LayoutContext context = new LayoutContext(layoutArea);

Text layoutText  = new Text(s);
layoutText.setTextRise(0f);
layoutText.setSplitCharacters(new DefaultSplitCharacters());
layoutText.setFont(font);
layoutText.setFontSize(fontSize);

Paragraph p = new Paragraph().add(layoutText);
LayoutResult hwResult = p.createRendererSubTree().layout(context);

此时,使用 IDE 检查 LayoutResult 对象。如果文本被拆分,您应该会看到一个 SplitRenderer,它可以为您提供更多信息。