
Для кого это руководство
В своё время для создания расширения к 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)
ссылка на оригинал статьи https://habr.com/ru/articles/802413/
Добавить комментарий