2017-01-27 18 views
0

Я пытаюсь создать файл с использованием python-pptx на сервере флэков. Все это работает, и даже загрузка работает, проблема возникает, когда я пытаюсь использовать text_frame.auto_size в своем коде. LibreOffice Impress отлично отображает текст, но MS Powerpoint не отображает текст правильно.Различные поведения в powerpoint и libreoffice по ppt, сгенерированные с помощью python-pptx

Вот изображения, поясняющие вопрос -

LibreOffice - enter image description here

Powerpoint - enter image description here

Кроме того, вот код, который я использую -

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 

Любая идея, что я делаю неправильно здесь?

ответ

0

Это, к сожалению, ограничение PowerPoint и необычное (по моему опыту) место, где LibreOffice действительно работает лучше.

Вы заметите, что если вы щелкнете в тексте PowerPoint, вставьте пробел и затем удалите его, чтобы текст автоматически автоподтверждался. Это может не решить проблему, но это указывает на причину.

В XML-документе, расположенном за слайдом, текущий размер шрифта «автоматически установлен» в текстовом поле cached. LibreOffice автоматически пересчитывает эту кешированную цифру при открытии презентации; PowerPoint нет.

Расчет размера шрифта «автоматически установлен» - это работа механизма рендеринга, которая имеет доступ к размерам шрифта, разрыву строки/слова и т. Д. python-pptx не включает механизм рендеринга и не имеет доступа к одному (насколько я знаю) для Python нет. Поэтому лучшее, что он может сделать, это оценить его, и он предпочитает не делать этого, так как это входит в рендеринг.

Однако есть экспериментальная функция в виде метода .fit_text(), который может помочь вам в большей части пути. В принципе, эта способность была настолько желанной, что кто-то был готов спонсировать решение «наилучшим образом», что и представляет этот метод. Документация по этой ссылке объясняет, как использовать ее и ее ограничения.

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

+0

Спасибо за ответ! Но я запускаю свой код на машине CentOS. И fit_text попытался получить информацию о шрифте, которая вызывает ошибку «Неподдерживаемая операционная система» для меня. Я также где-то читал, что есть запрос на перенос, ожидающий объединения, который исправит эту проблему. Но до тех пор я не могу использовать fit_text. : / – yashdosi