Как стать автором
Обновить

LibreOffice под микроскопом: создаём одноклеточное расширение

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.2K

Для кого это руководство

В своё время для создания расширения к LibreOffice (LO) мне пришлось перелопатить кучу форумов и документации. Информации много, но она разбросана про крупицам. А когда если не знаешь, с какой стороны подступиться, на завершение проекта может уйти много времени.

В этой статье мы соберём и запустим минимально возможное расширение c условно полезной нагрузкой. Всё, что оно будет делать — выделять весь текст в окне редактора при нажатии на единственный пункт созданного нами меню.

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

В итоге у нас должно получиться вот такое меню:

Что такое расширение

Расширения для офисного пакета LibreOffice — это плагины, расширяющие базовый функционал. Можно создавать и добавлять собственные плагины для любого приложения в офисном пакете: Writer, Calc, Impress (аналоги Word, Excel, PowerPoint) и других. Если вам приходилось писать макросы для этих программ, то расширение можно считать оболочкой для их хранения, передачи и исполнения.

Сам файл расширения — это обычный zip-архив с изменённым расширением .oxt. Вы буквально можете создать zip-файл любой программой и вручную поменять расширение.

Из чего состоит

Так как мы собираем самое маленькое, но жизнеспособное расширение, внутри будет только два XML-файла и одна папка.

Habr_Menu_Extension.oxt
├───META-INF
│   └───manifest.xml
└───habr_menu.xcu

Рассмотрим их по порядку.

Папка META-INF должна быть всегда. Её название изменять нельзя, так как внутри находится файл manifest.xml, из которого LO узнает, из чего состоит расширение и как с ним взаимодействовать.

В нашем случае manifest.xml будет очень простым:

<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest xmlns:manifest="<http://openoffice.org/2001/manifest>">
  <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="habr_menu.xcu"/>
</manifest:manifest>

Здесь мы перечисляем доступные файлы, указывая их назначение (тип). В нашем одноклеточном расширении такой файл всего один — habr_menu.xcu.

Файл habr_menu.xcu описывает структуру нашего меню: как называется, какие пункты содержит и какие команды запускает.

<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data
    xmlns:oor="<http://openoffice.org/2001/registry>"
    xmlns:xs="<http://www.w3.org/2001/XMLSchema>" oor:name="Addons" oor:package="org.openoffice.Office">
    <node oor:name="AddonUI">
        <node oor:name="OfficeMenuBar">
            <node oor:name="org.torrua.habr_menu" oor:op="replace">
                <prop oor:name="Title" oor:type="xs:string">
                    <value xml:lang="en">Habr</value>
                </prop>
                <prop oor:name="Target" oor:type="xs:string">
                    <value>_self</value>
                </prop>
                <node oor:name="Submenu">
                    <node oor:name="N001" oor:op="replace">
                        <prop oor:name="Title" oor:type="xs:string">
                            <value xml:lang="en">Say Hello!</value>
                        </prop>
                        <prop oor:name="Target" oor:type="xs:string">
                            <value>_self</value>
                        </prop>
                        <prop oor:name="Context" oor:type="xs:string">
                            <value>com.sun.star.text.TextDocument</value>
                        </prop>
                        <prop oor:name="URL" oor:type="xs:string">
                            <value>.uno:SelectAll</value>
                        </prop>
                    </node>
                </node>
            </node>
        </node>
    </node>
</oor:component-data>

Если вы умеете читать XML-разметку, разобраться в содержимом будет несложно. Здесь мы иерархически добавляем в Addons некий элемент интерфейса — AddonUI. В нашем случае это элемент типа OfficeMenuBar — то есть главного меню программы.

Атрибут name вложенного элемента (ноды) содержит идентификатор нашего расширения. Он должен быть уникальным, так как по нему LO будет отличить наше меню от чужого, даже если у них будут одинаковые названия. Я выбрал "org.torrua.habr_menu", но можно использовать любой текст.

Далее указываем свойства меню:

  • Title (заголовок меню в интерфейсе) — напишем "Habr"

  • Target (где оно должно открываться) — в нашем случае это _self, то есть в том же окне.

В ноде Submenu мы перечисляем подпункты меню, у каждого из которых должен быть порядковый номер, определяющий их очерёдность. Номер может начинаться с текста, но заканчиваться должен цифрами, например "N001".

Каждого подпункту необходимо прописать следующие свойства:

  • Title (заголовок пункта в интерфейсе) — "Say Hello"

  • Target — тоже укажем _self

  • Context (контекст) — это свойство указывает, в каком из приложений офисного пакета будет отображаться этот элемент. Мы укажем "com.sun.star.text.TextDocument", чтобы кнопка появлялась в текстовом редакторе Writer. Это значит, что мы не увидим её, когда откроем Calc или Impress. Но если необходимо, можно указать несколько приложений через запятую.

  • URL — это свойство определяет, какое действие будет выполнено при нажатии. Укажем ".uno:SelectAll" — стандартную команду для выделения всего содержимого активного окна.

Собираем

Теперь собираем созданные файлы в zip-архив и меняем его расширение на oxt.

Устанавливаем

Чтобы установить расширение, нужно просто запустить созданный файл. Конечно, до этого у вас уже должен быть установлен сам LO. Появится окно подтверждения установки:

Нажимаем ОК и наше расширение появляется в общем списке:

Обратите внимание, что расширение названо именем файла. Это произошло потому, что мы не добавили в корень расширения файл description.xml, где обычно содержится информация о названии, версии и издателе расширения.

Нам осталось только перезапустить программу и проверить работу нашего меню!

Скачать готовое расширение и потрогать файлы самому можно в моем репозитории на GitHub: Release 0.0.1 ? Статья на Хабре · torrua/habr_menu_oxt (github.com)

Теги:
Хабы:
Всего голосов 23: ↑23 и ↓0+23
Комментарии6

Публикации

Истории

Ближайшие события

2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
11 – 13 декабря
Международная конференция по AI/ML «AI Journey»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань