如何在段落级别开始新页面?我知道我可以在文档级别执行此操作,但这会破坏我的格式。
也许有功能可以在页面上找到剩余的行,具体取决于字体和字体大小?
答案 0 :(得分:3)
你绝对可以做到这一点。 但它需要一些关于iText如何呈现其内容的知识。
在内部,当呈现Paragraph
对象时,它使用ParagraphRenderer
。每个ParagraphRenderer
都有一个或多个LineRenderer
个对象作为其子对象。同样,每个LineRenderer
都有一个或多个TextRenderer
个对象。
为了获得有关段落拆分位置的信息,您可以要求Paragraph
对象针对给定的LayoutContext
对象执行布局(包含可用空间的宽度和高度,如以及其他一些有用的信息),然后回到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
,它可以为您提供更多信息。