python - 如何将动态页码插入到添加的幻灯片中?

标签 python xml python-pptx

通过修改后的 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/

相关文章:

python - 正则表达式在同一字符串上返回不一致的结果

xml - 与多行 XML 案例匹配的模式

xml - oracle xml解析给出无效字符错误

Python pptx - 单元格中具有不同颜色的部分文本

具有不同值类型的 Python3 输入

python - 条件循环

python - 无法使用 cx_freeze 和 PySide2 进行编译

xml - 您是否有任何想法可以让本类(class)的每次点击都播放一个新的音频文件?

python - 如何使用 pptx-python 设置幻灯片的大小?

python - 在 python-pptx 中为运行添加突出显示