2

我正在使用 Python 库python-pptx生成一些 powerpoint,在某些情况下 - 正在生成的文本在幻灯片之外(因为有两个很多项目符号或文本太大)。

例如 :

+------------------------------------------+
|     Title of the slide                   |
+-------+-----------------------+----------|
|     o - First Bullet                     |
|     o - Second bullet                    |
|     o - Third bullet                     |
+------------------------------------------+ <-- End of slide 
      o - Fourth bullet    <- Out of slide
      o - Fifth  bullet    <- Out of slide

所以我想知道是否有任何实用程序来检测文本是否从占位符或幻灯片中取出?

提前致谢,

弗洛里安

4

3 回答 3

1

你可以MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE这样使用:

from pptx.enum.text import MSO_AUTO_SIZE
...
content_ph = slide.placeholders[1]
content = body_content_ph.text_frame
content.clear()
content.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE

autosize您可以在此处找到更多信息:http: //python-pptx.readthedocs.io/en/latest/api/enum/MsoAutoSize.html

于 2017-07-18T10:07:45.860 回答
1

为了它的价值......我最终手动完成了这项工作。

在我的例子中,一行可以有 68 个字符。因此,每个文本所需的行数将是:

number_of_line = 文本/68 + 1

在我的情况下,我的形状中会有 6 行,所以每次我添加一些文本时,我都会首先确保 number_of_line + text/68 + 1 <= 6。如果它是错误的 - 那么我会添加一张新幻灯片。

于 2017-01-09T21:47:09.943 回答
0

如果 python-pptx 库可以访问文本框的 BoundTop 和 BoundHeight 属性,您可以使用它:

一个 VBA 示例,您可以在 PPT 中进行测试以了解它是如何工作的;请务必在运行之前选择一个文本框:

Sub InOrOut()
    Dim osh As Shape
    Set osh = ActiveWindow.Selection.ShapeRange(1)
    With osh.TextFrame.TextRange
        If .BoundTop + .BoundHeight > osh.Top + osh.Height Then
            MsgBox "Text is out of the box"
        End If
    End With
End Sub

您可能会注意到一些细微的差异;如果您需要更精确,您还需要考虑 TextFrame 的 .MarginTop 和 .MarginBottom 。

针对 ActivePresentation.PageSetup.SlideHeight 测试 .BoundTop + .BoundHeight 以确定文本是否超出幻灯片的底部。

于 2017-01-06T16:38:38.647 回答