java - 如何在段落级别分页?

标签 java itext7

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

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

最佳答案

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

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

为了获取有关段落分割位置的信息,您可以要求 Paragraph 对象针对给定的 LayoutContext 对象(包含宽度和宽度)执行布局。可用空间的高度,以及一些其他有用的信息),并获取 LayoutResult 返回。

LayoutResult 将能够告诉您Paragraph 被分割的位置

尝试下面的代码。 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,它可以为您提供更多信息。

关于java - 如何在段落级别分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48844983/

相关文章:

java - BroadcastReceiver 中的 NullPointerException

java - 如何在 Delphi 对象或字符串中隐式使用 ToString()?

java - 将 Tiff 转换为 PDF : PDF is corrupted

java - 如何处理具有相同名称的表单字段?

c# - 如何使用 iText7 和 C# 将文本添加到现有 pdf 而不覆盖内容?

c# - 枚举命名目的地

java - 如何从数组中打印出一个随机字符串

java - 如何使用 JProgressBar 显示文件复制进度?

java - 哪里有Java小程序游戏入口?

java - iText 7 - 重新生成使用 Adob​​e 创建的条形码字段