我目前正在处理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
有太多的限制,无法用作分页指标:
-
如果从未渲染过文档,则不会有
w:lastRenderedPageBreak
元素。 -
如果文档在呈现后发生了更改,则现有的
w:lastRenderedPageBreak
元素将过时。 -
渲染可能取决于目标媒体的特性。
-
渲染可能取决于换行和分页算法或其实现的细节。
-
即使可以忍受#1到#4的限制,
w:lastRenderedPageBreak
在历史上也存在可靠性问题。
有关更多详细信息,请参阅:
-
如何通过页码访问OpenXML内容?
-
OpenXML:lastRenderedPageBreak在添加新段落时插入