我正试图在python中创建一个程序,该程序可以在.docx文件中找到一个特定的单词,并返回它出现的页码。到目前为止,在浏览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"和/或"python docx page break"上搜索,您会在这里看到其他问题/答案,这些问题/答案可能会提供更多信息。
使用Python docx:识别段落中的分页符
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)