如何打破段落级别的页面?

时间:2018-02-17 19:14:31

标签: java itext7

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

也许有功能可以在页面上找到剩余的行,具体取决于字体和字体大小?

1 个答案:

答案 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,它可以为您提供更多信息。