Как выбрать текстовое поле в 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:
- В OpenOffice Macro Information Эндрю Питоняка есть ссылки на его книги с несколькими примерами.
- Небольшой учебник с некоторыми основными функциями
- Официальная документация
- Управляйте Libreoffice Impress из Python
Этот код изменяет размер шрифта для стандартного ("западного") шрифта.
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