页码 python-docx

Page number python-docx

我正在尝试在 python 中创建一个程序,它可以在 .docx 文件中找到一个特定的词和它出现的 return 页码。到目前为止,在查看 python-docx 文档时,我无法找到如何访问页码甚至页码所在的页脚。有没有办法使用 python-docx 甚至 python 来做到这一点?或者,如果没有,最好的方法是什么?

简短的回答是否定的,因为分页符是由渲染引擎插入的,而不是由 .docx 文件本身决定的。

但是,某些客户会在已保存的 XML 中放置一个 <w:lastRenderedPageBreak> 元素,以指示上次呈现页面时他们破坏页面的位置。

我不知道这是哪个做的(尽管我希望 Word 本身做)以及它的可靠性如何,但如果您想在 Python 中工作,那是我推荐的方向。您可能会使用 python-docx 来获取对您想要的 lxml 元素的引用(如 w:document/w:body),然后使用 XPath 命令或其他方法迭代到特定页面,但只需通过在那里将进行一些详细的开发以使其正常工作。

如果您在原生 Windows MS Office API 中工作,您可能会得到更好的东西,因为它实际上运行的是 Word 应用程序。

如果您在 python-docx 中生成文档,则不会放置这些元素,因为它不会尝试呈现文档(也不太可能)。我们也不太可能很快添加对 w:lastRenderedPageBreak 的支持;我什至不太确定那会是什么样子。

如果您在 'lastRenderedPageBreak' and/or 'python-docx page break' 上搜索,您会在此处看到其他 questions/answers,可能会提供更多信息。

使用

from docx import Document
fn='1.doc'
document = Document(fn)
pn=1    
import re
for p in document.paragraphs:
    r=re.match('Chapter \d+',p.text)
    if r:
        print(r.group(),pn)
    for run in p.runs:
        if 'w:br' in run._element.xml and 'type="page"' in run._element.xml:
            pn+=1
            print('!!','='*50,pn)