Изменение размера текстовых полей на основе содержимого текстового поля в Powerpoint из PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Изменение размера текстовых полей на основе содержимого текстового поля в Powerpoint из Python

Сообщение Anonymous »

В проекте, над которым я работаю, я заполняю шаблон PPTX с помощью jinja конкретной информацией из словаря. Часть заполнения работает хорошо, но текущая проблема заключается в том, что размер текстового поля не обновляется после заполнения, в результате чего текстовое содержимое выходит за пределы формы текстового поля. Я хочу переместить текстовые поля так, чтобы они не перекрывались, но это невозможно без правильного размера текстового поля.
С помощью python-pptx я могу изменить размер текста в соответствии с размером форму, а не наоборот. Невозможно определить размер содержимого текстового поля, только исходный размер фигуры (до заполнения).
С помощью простого макроса в VBA я могу исправить размер всех фигур в Frame в зависимости от размера их текстового содержимого, и его запуск с помощью Python возможен с помощью win32com.client. Однако это решение работает только на компьютере с установленным Powerpoint и, следовательно, не может работать в стандартном серверном интерфейсе веб-приложения Azure, как мне нужно здесь.
Есть ли способ:
  • Запустите макрос из файла .pptm и сохраните его после выполнения макроса.
  • Измените размер всех текстовых полей на слайде на основе их текстового содержимого и сохранения результата. В качестве быстрой точности изменение размеров одного текстового поля, по-видимому, обновляет все остальные текстовые поля так, чтобы их текст соответствовал размеру их фигур, что означает уменьшение размера текста, чего я не хочу. Однако сначала сохранение их размеров, а затем изменение размера во второй раз работает.
Похоже, что Aspose и UIPath работают с этим, но я хотел бы найти возможные бесплатное решение этой проблемы.
Похоже, что макросы не поддерживаются в Office365 или Sharepoint, а OfficeScript ограничен для Powerpoint. Я не хочу запускать виртуальную машину только для этой задачи, если это возможно.
Текущий сценарий VBA:

Код: Выделить всё

Sub ResizeTextBoxesWithMission()
Dim slide As slide
Dim shape As shape
Dim textHeight As Double
Dim textBoxHeight As Double
Dim textBoxSizes As Collection
Set textBoxSizes = New Collection

' First loop: Calculate text box sizes without resizing
For Each slide In ActivePresentation.Slides
For Each shape In slide.Shapes
If shape.HasTextFrame Then
If Len(shape.TextFrame.TextRange.Text) > 0 Then
' Check if the name of the shape contains "Mission"
' Get the text height for this text box
textHeight = shape.TextFrame.TextRange.BoundHeight
textBoxHeight = textHeight + 10 ' Add some padding
' Store the shape's name and calculated height in the collection
textBoxSizes.Add Array(shape.Name, textBoxHeight)
End If
End If
Next shape
Next slide

' Second loop: Apply the calculated sizes
For Each slide In ActivePresentation.Slides
For Each shape In slide.Shapes
If shape.HasTextFrame Then
' Loop through the stored sizes
Dim i As Long
For i = 1 To textBoxSizes.Count
Dim item As Variant
item = textBoxSizes(i)
' Check if the current shape matches the stored name
If shape.Name = item(0) Then
' Apply the calculated height
shape.Height = item(1)
End If
Next i
End If
Next shape
Next slide
End Sub
Большое спасибо. Стек для серверной части — Python с FastApi, python-pptx и jinja

Подробнее здесь: https://stackoverflow.com/questions/789 ... rom-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»