Для кого это руководство
В своё время для создания расширения к 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)