Python-pptx确定文本是否仍在幻灯片中

时间:2017-01-06 03:17:52

标签: python powerpoint python-pptx

我正在使用Python库 python-pptx 生成一些powerpoint,在某些情况下 - 正在生成的文本位于幻灯片之外(因为有两个子弹或文本也是大)。

例如:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // ... code that creates or dequeues the cell

    cell.accessibilityElementsHidden = true

    return cell
}

所以我想知道是否有任何实用工具可以检测到文本是从占位符中移出还是从幻灯片中移出来了?

提前致谢,

弗洛里安

3 个答案:

答案 0 :(得分:1)

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

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

number_of_line = text / 68 + 1

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

答案 1 :(得分: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

答案 2 :(得分:0)

如果python-pptx库有一种访问文本框的BoundTop和BoundHeight属性的方法,你可以使用它:

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

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以确定文本是否在幻灯片的底部。