如何使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的原因是,在解析内容时,我在处理脚注时遇到了问题,因为它们的格式与普通文本相同(源代码有问题,无法修复(。唯一的区别是它们的开头有一个上标数字。这里需要确定一个页面是否已经结束,因为目前如果脚本不知道页面是否已经终止,它将继续将下一页的文本包括在脚注中,直到找到w:lastRenderedPageBreak。

例如:我希望docx的XML从以下内容更改:

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

进入这个:

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

所有文本都包含在框架中,因此无需担心页面大小、方向和边距。只要可以用内容或xml标记页面的末尾或新页面的开头,文档的外观就无关紧要了。

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

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

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

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

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

  5. 即使可以忍受#1到#4的限制,w:lastRenderedPageBreak在历史上也存在可靠性问题。

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

  • 如何通过页码访问OpenXML内容?

  • OpenXML:lastRenderedPageBreak在添加新段落时插入

最新更新