使用 python-pptx 生成的 ppt 在 powerpoint 和 libreoffice 中的不同行为

Different behavior in powerpoint and libreoffice by ppt generated using python-pptx

我正在尝试在烧瓶服务器上使用 python-pptx 创建一个文件。当我尝试在我的代码中使用 text_frame.auto_size 时,所有这些都在工作,甚至下载也在工作。 LibreOffice Impress 完美显示文本,但 MS Powerpoint 无法正确显示文本。

这是解释问题的图片 -

LibreOffice -

幻灯片 -

此外,这是我正在使用的代码 -

text_box = slide.shapes.add_textbox(left, top, width, height)
text_frame = text_box.text_frame
text_frame.word_wrap = True
text_frame.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE

知道我在这里做错了什么吗?

不幸的是,这是 PowerPoint 的局限性,也是 LibreOffice 实际上做得更好的不寻常(以我的经验)地方。

您会注意到,如果您在 PowerPoint 文本中单击,插入 space 然后将其删除,文本将自动自动调整。这可能无法解决问题,但它指出了原因。

在幻灯片后面的XML中,文本框的当前"auto-fitted"字体大小是缓存。当演示文稿打开时,LibreOffice 会自动重新计算这个缓存的图形; PowerPoint 没有。

计算 "auto-fitted" 字体大小是渲染引擎的工作,它可以访问字体大小、line/word 中断等。python-pptx 不包括渲染引擎,也不它是否可以访问一个(据我所知,none 存在 Python)。所以它能做的最好的事情就是估计它,它宁愿不这样做,因为那会进入渲染。

但是,.fit_text() 方法中有一个实验性功能,可以帮助您完成大部分工作。基本上,这种能力非常需要,以至于有人愿意赞助 "best-efforts" 解决方案,这就是该方法所代表的。该文档 link 解释了如何使用它及其限制。

请注意,该方法是实验性的,这意味着如果它不能按您需要的方式工作,则不会被视为错误。如果你能做得更好,你可以自由地阐述它。