Как сохранить параметры положения фигуры, чтобы она оставалась самой левой стороной при заданном параметре «влево», но не в средней точке? - PullRequest
0 голосов
/ 22 октября 2018

При использовании модуля python-pptx я узнал, что он размещает фигуру, определяющую центр фигуры на заданной длине, в левом параметре.Предположим, я дал shape = slide.shapes.add_textbox(Inches(1), top, width, height), тогда центральная точка фигуры будет расположена на расстоянии 1 дюйма от левой стороны.Что я хочу сделать, так это то, что левая сторона фигуры должна быть расположена на расстоянии 1 дюйма от левой стороны слайда.Потому что прямо сейчас, если я добавлю больше текста, останется большая часть текста со слайда.Любой способ сделать это?

Аналогичный вопрос, который я нашел на ссылка , но ответа нет, так как вопрос неправильно понят и имеет небольшую репутацию, я не могу комментировать там.

Спасибо

1 Ответ

0 голосов
/ 28 октября 2018

Атрибуты .top и .left формы представляют расстояние от верхнего левого угла слайда до верхнего левого угла фигуры.Ваша идея о том, что положение фигуры относительно центра фигуры ошибочна.

Если у вас есть текстовое кровотечение с левой стороны вашей фигуры, я бы начал с проверки настройки Paragraph.alignmentдля каждого абзаца в текстовом фрейме формы:

from pptx.enum.text import PP_ALIGN

for paragraph in shape.text_frame.paragraphs:
    paragraph.alignment = PP_ALIGN.LEFT

Если абзац выравнивается вправо , текст будет расти влево.

Еще один фактор, который можетОтносится к этому поведению настройка TextFrame.word_wrap.Если перенос по словам отключен, текст может кровоточить за пределами горизонтальных границ фигуры.

shape.text_frame.word_wrap = True

Наконец, поведение фигуры TextFrame.auto_size может вызвать перемещение фигуры.в частности, когда выбран параметр «Изменить размер по размеру текста» , один или несколько атрибутов размера или положения изменяются для соответствия.Обратите внимание, что этот параметр может взаимодействовать с параметром выравнивания абзаца при выборе стороны, которая должна «растягивать» фигуру, чтобы она соответствовала тексту.

from pptx.enum.text import MSO_AUTO_SIZE

shape.text_frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT

Возможно, вам придется поэкспериментировать, чтобы найти комбинацию, которая дает желаемое поведение,Я бы сказал, что самое безопасное место для начала это:

from pptx.enum.text import MSO_AUTO_SIZE
from pptx.enum.text import PP_ALIGN

shape = slide.shapes.add_textbox(Inches(1), top, width, height)
text_frame = shape.text_frame
text_frame.text = 'Text I want to appear in text-box'
text_frame.auto_size = MSO_AUTO_SIZE.NONE
text_frame.word_wrap = False
for paragraph in text_frame.paragraphs:
    paragraph.alignment = PP_ALIGN.LEFT

Также обратите внимание, что поведение с авторазмером может слегка отличаться в LibreOffice, чем в Microsoft PowerPoint.Это не будет иметь место в вышеупомянутом «безопасном» варианте, но нужно помнить.

...