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

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

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

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

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

1 ответ1

0

Компонент 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, но делает некоторые вещи более сложными, чем необходимо).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .