0

我正在尝试在烧瓶服务器上使用 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

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

4

1 回答 1

0

不幸的是,这是 PowerPoint 的一个限制,也是 LibreOffice 实际上做得更好的一个不寻常的地方(根据我的经验)。

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

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

计算“自动适应”字体大小是渲染引擎的工作,它可以访问字体大小、换行/分词等。python-pptx不包括渲染引擎,也无法访问(Python 不存在,因为据我所知)。所以它所能做的最好的事情就是估计它,它不喜欢那样做,因为这涉及到渲染。

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

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

于 2017-01-27T19:25:06.457 回答