【问题标题】:How to identify if a paragraph lands on a page break in Apache POI如何识别段落是否位于 Apache POI 中的分页符上
【发布时间】:2015-08-31 00:26:12
【问题描述】:

我目前使用 Apache POI 创建一个简单的 .docx 文件。问题是,如果一个段落位于分页符上,我需要将整个段落移到下一页。唯一的问题是我不确定如何确定段落是否位于分页符上。

所以我的问题是:

有没有办法在 Apache POI 中确定段落是否位于分页符上?

例如:

本段:

将被识别为分页符并自动更改为:

【问题讨论】:

  • 您可以使用Apache POI 确定word 文档的分页符。那对你来说应该没问题。比 O 可以发布答案吗?
  • @mustangDC 抱歉,您的评论让我有些困惑。我将如何在文档中找到带有分页符的段落?
  • 我之前的评论意味着如果你能找到分页符,那么你可以将你的文本引导到下一页。我猜这对我来说很容易。顺便说一句,请提供您尝试结束页面的代码。
  • 或者你也可以在任何你想要的地方放置一个分页符。这样你就可以控制你的文字
  • 等一下,我会在代码中发布 .. 类似于您的代码。让我先试试

标签: java ms-word apache-poi docx page-break


【解决方案1】:

这是一个示例代码,可能不是 100%。试一次,告诉我,如果我能根据你的情况改进它,那肯定会做。

假设您使用的是 XWPFDocument 文档类

ExtendedProperties ep = document.getProperties().getExtendedProperties();
int numberOfLines = ep.getUnderlyingProperties().getLines());

上面提到的代码将为您提供文档中的行数,并将其与您放入文档中的行数相匹配。

例如:-

  1. 假设 numberOfLines 返回 50。

  2. 使用计数器检查您在文档中打印的行数,如果您觉得段落已经到达并且行数接近 40,请在此处打断。

    ExtendedProperties ep = document.getProperties().getExtendedProperties(); int numberOfLines = ep.getUnderlyingProperties().getLines()); XWPFDocument document = new XWPFDocument(); XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); //create new run Page n run.setText("TITLE");
    //……………………………Your Logic here……………………………// run.addCarriageReturn(); //separate previous text from break run.addBreak(BreakType.PAGE); //Break the page run.addBreak(BreakType.WORD_WRAPPING); //cancels effect of page break WXPFRun run2 = paragraph.createRun(); //create a new run for pane n+1

希望它有助于接近您的需求。

谢谢

【讨论】:

  • 谢谢,我要试试这个,但是我该如何使用计数器检查我正在打印的行数?
  • 如何打印文档中的文本。请提供该代码(您之前使用的代码)
  • 抱歉,我无法提供任何相关代码,因为我需要先回答我的问题,然后才能开始实际编写我们正在讨论的内容。但本质上,我只是打印到文本文档,但更改了一些运行的文本。例如:run.setText("Title"),就像你上面的那样。
  • 我希望你已经习惯了类似的东西。我们正在谈论的,特别是代码。所以,试一次,让我知道
  • 好吧,从上面我将如何检查我正在打印的行数?如果我能够保持计数,那么我想我可以解决我的问题。但我不确定如何实际检查我的行数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多