Java 如何在段落级断页?

Java 如何在段落级断页?,java,itext7,Java,Itext7,如何在段落级别开始新页面?我知道我可以在文档级别这样做,但这会破坏我的格式 也许有一个功能可以根据字体和字体大小查找页面上的剩余行?您完全可以这样做。 但它需要一些关于iText如何呈现其内容的知识 在内部,渲染段落对象时,它使用段落渲染器。每个ParagraphRenderer都有一个或多个LineRenderer对象作为其子对象。同样,每个LineRenderer都有一个或多个TextRenderer对象 为了获取有关段落拆分位置的信息,您可以要求段落对象对给定的布局上下文对象(包含可用空间

如何在段落级别开始新页面?我知道我可以在文档级别这样做,但这会破坏我的格式


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

您完全可以这样做。 但它需要一些关于iText如何呈现其内容的知识

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

为了获取有关段落拆分位置的信息,您可以要求
段落
对象对给定的
布局上下文
对象(包含可用空间的宽度和高度以及一些其他有用信息)执行布局,然后返回
布局结果

LayoutResult
将能够告诉您
段落的拆分位置

试试下面的代码。
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如何呈现其内容的知识

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

为了获取有关段落拆分位置的信息,您可以要求
段落
对象对给定的
布局上下文
对象(包含可用空间的宽度和高度以及一些其他有用信息)执行布局,然后返回
布局结果

LayoutResult
将能够告诉您
段落的拆分位置

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

正确的方法是在这种情况下使用两段而不是两段。它到底是如何打破你的布局的?我认为你试图通过创建更大的一段来解决这个问题。正确的方法是在这种情况下使用两段而不是两段。它到底是如何打破你的布局的?我认为你正在试图通过创造更大的问题来解决这个问题。