Как выбрать текстовое поле в LibreOffice Impress и изменить его размер шрифта с помощью Python?

Я новичок в использовании python с пакетом LibreOffice. Я в основном пытаюсь программно скопировать базовый файл Impress и массово скопировать его, но изменяя размер определенных текстовых полей.

Я проверил некоторую документацию в Интернете по этому поводу, но не понимал, как этого добиться.

Спасибо

Изменить: я написал этот тестовый код

import os
import zipfile
import glob
import uno

def MassCreatePresentation():

    file = os.path.abspath(glob.glob('INTROTEMPLATE.pptx')[0])
    print('File Found')
    print(file)
    oDoc = XSCRIPTCONTEXT.getDocument()

    return

Но показывает эту ошибку:

File "MassPresentation.py", line 10, in MassCreatePresentation
    oDoc = XSCRIPTCONTEXT.getDocument()
NameError: name 'XSCRIPTCONTEXT' is not defined

Редактировать:

Хорошо, я наконец понял это, используя эту логику. Как я это сделал:

1) получить shutil для копирования базового файла 2) использовать zipfile для распаковки скопированного файла pptx, 3) перейти к слайду xml и использовать readlines() 4) изменить xml и сохранить его 5) архив как zip, а затем переименовать файл в.pptx 6) Празднуйте

2 ответа

Поскольку запись макросов в Impress не представляется возможной, вы можете попробовать другой способ.

Файлы LibreOffice - это в основном просто zip-файлы с файлами xml или изображениями.

Если разархивировать odp-файл, появится content.xml внутри.

Вы можете обработать этот файл с помощью ElementTree или lxml и изменить нужное поле. Настройки шрифта тоже где-то там.

<?xml version="1.0" encoding="UTF-8"?>
  ....
  <draw:text-box><text:list text:style-name="L1">
    <text:list-item>
      <text:p>CHANGE TEXT HERE</text:p>
    </text:list-item></text:list>
  </draw:text-box>
  ....
  <style:text-properties fo:font-family="StarSymbol" fo:color="#666666" fo:font-size="45%"/>

Я не смог найти хорошей документации, какие методы доступны с использованием макроса iterface. Это могло бы быть более элегантно, но доказано, что это сработает в течение одного или двух часов работы:

  • Разархивировать
  • Открыть с помощью ElementTree
  • + Изменить
  • Сохраните файл
  • Заархивируйте его и обновите старый

На этой странице показаны некоторые коды для работы с файлами ZIP и LibreOffice. Также этот.

В лучшем случае поместите содержимое content.xmlчерез интернет форматировщик как это. Так можно составить хорошее представление о его структуре.

Вы можете назначить шрифт напрямую или использовать один из определенных стилей.

Это определение L1:

<text:list-style style:name="L1">

в <office:automatic-styles>

Это использование этого стиля:

<text:list text:style-name="L1">

О макросах Impress очень мало информации и примеров, и большинство из них написаны на BASIC:

Этот код изменяет размер шрифта для стандартного ("западного") шрифта.

def resize_text_box():
    oDoc = XSCRIPTCONTEXT.getDocument()
    oDrawPage = oDoc.getDrawPages().getByIndex(0)
    for oShape in oDrawPage:
        if oShape.supportsService("com.sun.star.drawing.TextShape"):
            oShape.CharHeight = 18

Связанный: /questions/53771852/libreoffice-kak-vosstanovit-tekuschij-element/53771860#53771860

Другие вопросы по тегам