Как найти настоящую первую линию фигуры в презентации pptx - PullRequest
1 голос
/ 09 марта 2020

На данный момент мне нужно получить фактическую ширину текста, лучшее решение, которое я пробовал, - найти первую строку текста и получить ее ширину. Представленные мне презентации были сделаны разными людьми, и я не могу напрямую на них повлиять. И оказывается, что сама рамка формы в презентации часто намного шире, чем текст, что является проблемой, потому что мне нужно получить видимые коллизии формы текста, которые возможны только тогда, когда у меня есть настоящий кадр текста (пытался показать его в screenshot1 , screenshot2 )

Моя лучшая попытка получить настоящую первую строку:

# i have already compiled PIL font, with font typeface and size named "font"
# width of shape and text of shape
# and also class TextWrapper that wraps given string with given width and outputs a list

# get first line from wrapped text, and from tuple select width
width_first = font.getsize(TextWrapper(shape.text, font, width).text_lines[0])[0]

# get lines that wrapped at width first string
wrapped_lines = TextWrapper(shape.text, font, width_first).text_lines

# ... some calculations here 

Проблема в том, что символ переноса похож на ' \ n 'не всегда в тексте, но в презентации я вижу эту обертку.

Я пытался объяснить, как я мог, кто-нибудь сталкивался с этим вообще?

РЕДАКТИРОВАТЬ:

Я нашел способ сделать то, что мне нужно. Если вам нужно что-то равное, см. Код.

import win32com.client

Application = win32com.client.Dispatch("PowerPoint.Application")
# WithWindow=False forces PowerPoint to do not open the PowerPoint Window
Presentation = Application.Presentations.Open("ABCPATH/to/presentation.pptx",
                                               WithWindow=False)

for Slide in Presentation.Slides:
    for Shape in Slide.Shapes:
        if Shape.HasTextFrame: # checks if shape has text, becouse we avoiding imgs
            # that what we need
            first_line = Shape.TextFrame.TextRange.Lines(1, 1)       

Вы должны установить приложение PowerPoint для этого и установить pywin32. И оно работает только на Windows, так что это не очень хороший выбор, но для меня он отлично работает

Может быть, кто-то нашел это пригодным для использования

...