如何使 docx 文件呈现/加载/添加并保留所有 w:LastRenderedPageBreak

问题描述

我目前正在处理 docx 文件,我使用 w:lastRenderedPageBreak 作为每个页面内容标记。有必要确定一个页面是否已经结束。

我现在的代码是这样的:

from docx import Document
document = Document(file)
for p in document.paragraphs:
  if 'lastRenderedPageBreak' in p._element.xml:
     # do something
  # rest of code here

现在我遇到的问题是一个有4页的docx文件只有2个w:lastRenderedPageBreak标签。我尝试打开 docx 文件并保存它,但 w:lastRenderedPageBreak 标签没有增加

w:lastRenderedPageBreak 唯一一次正确显示分页符是当我打开 docx 文件并将其另存为 XML 文件时。

在使用 python-docx 解析文本和格式时,有什么方法可以跳过另存为 XML 部分以正确查看 lastrenderedpagebreaks 吗?如果可能,我想在 python、win32com 或 vba 中进行。

编辑: 我想要 w:lastRenderedPageBreak 的原因是我在解析内容时处理脚注时遇到问题,因为它们的格式与普通文本相同(源问题并且无法修复)。唯一的区别是它们的开头有一个上标数字。这里需要确定页面是否已经结束,因为当前如果脚本不知道页面是否已经结束,它将继续将下一页的文本包含到脚注中,直到找到 aw:lastRenderedPageBreak。>

例如: 我希望 docx 的 XML 从此改变:

脚注 1:此处为文字。 \p 此处属于脚注 1 的附加文本。 脚注 2:这里的文字。 新页面文本从这里开始...

进入这个:

脚注 1:此处为文字。 \p 此处属于脚注 1 的附加文本。 脚注 2:这里的文字页面文本从这里开始...

所有文本都包含在框架中,因此无需担心页面大小、方向和边距。只要可以在 content 或 xml 中标记页面结束或新页面的开头,docx 的外观无关紧要。

解决方法

w:lastRenderedPageBreak 有太多限制,无法用作分页指示器:

  1. 如果文档从未呈现过,则不会有 w:lastRenderedPageBreak 元素。

  2. 如果文档在呈现后发生了更改,现有的 w:lastRenderedPageBreak 元素将失效。

  3. 渲染可能取决于目标媒体的特性。

  4. 渲染可能取决于换行和分页算法或其实现的细节。

  5. 即使可以忍受#1 到#4 的限制,w:lastRenderedPageBreak 也是 has historically had reliability issues

有关更多详细信息,请参阅:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...