通过修改后的 python-pptx 添加幻灯片时,每张幻灯片上的幻灯片编号都会出现占位符。然而,该字段中出现的不是实际的幻灯片编号,而是“幻灯片编号”字样。
其他答案提到使用静态文本框,但我们需要使用占位符,因为我们将创建幻灯片传输到各种客户端母版。标准文本框无法正确调整以适应不同的布局。我们还需要盒子 float ,这样我们就可以在某些页面上将照片放在它后面。最后,它必须是动态的,因为我们经常随后对页面进行洗牌,因此将索引作为静态数字传递给它会导致问题。
是否有一个字符串或命令可以插入到占位符中,从而自动拉动幻灯片在幻灯片中的位置?母版使用组合“<#>”,但这并不作为字符串传递时起作用。
为我的无知道歉,我只使用 python 和 python-pptx 几个星期(非常感谢它的创建者!)。
最佳答案
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>
因此,您的问题的简短答案是否。没有可以在文本框中插入的字符串来触发此 XML 的插入,而且也没有用于添加字段的 API 支持。
该方法是获得 <a:p>
文本框的元素,并使用 lxml 调用将此 XML 插入其中(此过程在其他 python-pptx
帖子中通常称为“解决方法函数”)。
您可以获得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
中包含的数字element 是缓存的幻灯片编号,打开演示文稿时 PowerPoint 可能不会自动更新。如果是这种情况,您需要在插入时正确设置,但当您随机播放幻灯片时它会自动更新。
关于python - 如何将动态页码插入到添加的幻灯片中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814070/