run.font.italic и run.font.bold возвращают None вместо True - PullRequest
0 голосов
/ 02 июля 2019

Мне нужно получить весь текст, выделенный курсивом и выделенный жирным шрифтом в абзацах. Я вручную превращаю текст в курсив и жирный шрифт, но приведенный ниже код ничего не возвращает. Является ли это только инициатором, или мы можем извлечь из него ценность, как я могу получить весь курсив и полужирный текст?

def get_italic_ratio(slide):
    count = 0
    for shape in slide.shapes:
        if not shape.has_text_frame:
            continue
        text_frame = shape.text_frame
        par = text_frame.paragraphs[0]
        run = par.add_run()
        print(run.font.italic) # returns None, should return True 
        print(run.font.bold) # returns None, should return True 

        print(text_frame.paragraphs)

1 Ответ

1 голос
/ 02 июля 2019

Я полагаю, что ваш вопрос заключается в том, как найти «эффективное» значение параметра форматирования шрифта.

Форматирование для прогона текста определяется набором правил, действующих в иерархии стилей. Если атрибут форматирования (скажем, жирный) применяется непосредственно к прогону, это имеет приоритет. Когда жирный шрифт не применяется напрямую, run.bold возвращает None, а «жирность» запуска определяется путем проверки остальной иерархии стилей. Это могут быть свойства макета слайда, мастер слайдов или тема или презентация по умолчанию (и, возможно, другие возможности).

Таким образом, для нахождения эффективного значения необходимо обнаружить эти правила и перейти к иерархии стилей, чтобы найти их для любого фрагмента текста. В python-pptx пока нет поддержки API.

...