通过修改后的python-pptx添加幻灯片时,每张幻灯片上的幻灯片编号都会出现占位符。但是,该字段中会出现单词“ Slide Number”,而不是实际的幻灯片编号。
其他答案提到使用静态文本框,但是当我们将创建幻灯片转移到各种客户端母版时,我们需要使用占位符。标准文本框无法正确调整以适应各种布局。我们还需要盒子漂浮起来,以便我们可以将照片放在某些页面的后面。最后,它必须是动态的,因为我们以后经常会洗牌,因此将索引作为静态数字传递给它会引起问题。
是否存在可以插入到占位符中的字符串或命令,该字符串或命令会自动将幻灯片在甲板上的位置拉出?母版使用组合键“ <#>”,但这不是作为字符串传递时可以工作。
对我的无知深表歉意,我只在python和python-pptx上工作了两个星期(非常感谢其创建者!)。
答案 0 :(得分:0)
PowerPoint中的“自动更新”幻灯片编号是字段。 XML看起来像这样:
<a:fld id="{1F4E2DE4-8ADA-4D4E-9951-90A1D26586E7}" type="slidenum">
<a:rPr lang="en-US" smtClean="0"/>
<a:t>2</a:t>
</a:fld>
因此,对您的问题的 short 答案是否。您无法在文本框中插入任何字符串来触发此XML的插入,并且还没有API支持添加字段。
方法是获取文本框的<a:p>
元素,并使用lxml调用(在其他python-pptx
帖子中通常称为“变通函数”的过程)将此XML插入到其中。
您可以像这样获得a:p
元素:
p = textbox.text_frame.paragraphs[0]._p
类似的方法可能会起作用,并且至少提供了该方法的概述:
from pptx.oxml import parse_xml
from pptx.oxml.ns import nsdecls
# ---get a textbox paragraph element---
p = your_textbox.text_frame.paragraphs[0]._p
# ---add fld element---
fld_xml = (
'<a:fld %s id="{1F4E2DE4-8ADA-4D4E-9951-90A1D26586E7}" type="slidenum">\n'
' <a:rPr lang="en-US" smtClean="0"/>\n'
' <a:t>2</a:t>\n'
'</a:fld>\n' % nsdecls("a")
)
fld = parse_xml(fld_xml)
p.append(fld)
a:t
元素中包含的数字是缓存的幻灯片编号,PowerPoint在打开演示文稿时可能不会自动更新。如果是这种情况,则在插入时需要正确处理,但是在随机播放幻灯片时会自动更新。