如何在段落级别分页?
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
,它可以为您提供更多信息。
如何在段落级别开始一个新页面?我知道我可以在文档级别执行此操作,但这会破坏我的格式设置。
也许有根据字体和字体大小查找页面上剩余行的功能?
你绝对可以做到这一点。 但它需要一些关于 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
,它可以为您提供更多信息。