Автоматизированный экспорт формул из OOo Writer

283
Spook

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

Я написал статью, в которой около 50 пронумерованных формул и несколько формул, встроенных в текст. Я ни за что не сниму их всех, это будет безумие.

Есть ли способ автоматизировать следующий процесс (или хотя бы его части):

  • Извлеките все формулы из документа OOo (нумерация не нужна, самих формул хватит)
  • Визуализировать их с указанным DPI или размером?

Отчаянный план состоял бы в том, чтобы вручную распаковать zip-файл и копаться в XML-файлах, но я надеюсь, что и этого не произойдет.

0

1 ответ на вопрос

0
Jim K

Компонент Math нелегко экспортирует изображения. Поэтому вместо этого скопируйте и вставьте в LibreOffice Draw, а затем экспортируйте файл PNG оттуда.

Вот некоторый код для перечисления объектов формулы Math.

Sub ExportFormulasAsImages oDoc = ThisComponent oEmbed = oDoc.getEmbeddedObjects() filenum = 0 For i = 0 To oEmbed.getCount() - 1 oObj = oEmbed.getByIndex(i) If oObj.supportsService("com.sun.star.text.TextEmbeddedObject") Then If oObj.CLSID = "078B7ABA-54FC-457F-8551-6147e776a997" Then oFormulaDoc = oObj.getEmbeddedObject().Parent oDrawPage = oFormulaDoc.DrawPage(0) filenum = filenum + 1 sURL = "file:///path/formula" & Format(filenum, "00") & ".jpg" End If End If Next MsgBox "Exported " & filenum & " formulas as images." End Sub 

Пример кода для копирования в Draw и последующего экспорта находится по адресу https://ask.libreoffice.org/en/question/141898/macro-for-saving-sheet-as-single-image-in-calc/ .

Я оставил вам решать, как именно написать код, но не стесняйтесь размещать сообщения на StackOverflow или ask.libreoffice.org, если вы застряли. Разместите код, который вы уже пробовали.

РЕДАКТИРОВАТЬ :

Хорошее место для начала изучения макросов LibreOffice - http://www.pitonyak.org/oo.php .

Чтобы узнать, что могут делать объекты, используйте инструмент для самоанализа, такой как MRI или XrayTool .

Что касается документации по API, игнорируйте префикс SwX при написании макросов. Эти документы полезны при использовании вместе с инструментом самоанализа. Взятые в одиночку, их трудно читать из-за структуры наследования.

Запись не является хорошим способом начать учиться писать макросы. Однако это полезно для некоторых диспетчерских операций, таких как копирование / вставка. Для этого включите экспериментальные функции в Сервис -> Параметры -> Дополнительно . В LO 6 есть специальный флажок Включить запись макросов . Затем Инструменты -> Макросы -> Запись макроса .

Еще одна вещь для рассмотрения: для серьезной работы Python-UNO, как правило, является лучшим способом написания макросов, например, из-за структур данных, регулярных выражений и обработки файлов. (C ++ возможен, но не так хорош для большинства макросов. Java - хороший выбор и тесно связан с API UNO, но делает некоторые вещи более сложными, чем необходимо).

Спасибо за ответ. Я бы с удовольствием продолжил его разработку, но мне не удалось найти документацию для макросов LibreOffice. Тот, который я нашел, https://api.libreoffice.org/docs/idl/ref/index.html, не упоминает, например, SwXTextEmbeddedObject. Я также не нашел возможности записать макрос, чтобы я мог увидеть, где я должен найти. Моя текущая идея состоит в том, чтобы запустить Draw из Writer, вставить туда формулу и попытаться экспортировать чертеж в png файл. Spook 5 лет назад 0
Кроме того, в редакторе кода LibreOffice отсутствует автозаполнение, поэтому я даже не могу догадаться, что я могу сделать с объектами в сценарии ... Spook 5 лет назад 0
@Spook: см. Отредактированный ответ для некоторых советов. Jim K 5 лет назад 0

Похожие вопросы