Entwicklung/Entwicklung von Erweiterungen
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Spende
Einführung
Erweiterungen ermöglichen es, die Funktionalität von LibreOffice zu erweitern, ohne den Quelltext von LibreOffice selbst verändern zu müssen. LibreOffice kennt drei Arten von Erweiterungen.
- Es können verschiedene Programmiersprachen verwendet werden, um LibreOffice Erweiterungen unter der UNO component API zu erstellen. Unterstüzte Programmiersprachen sind Basic, [Python], JavaScript, Jave, BeanShell und C++. Der Code und die Daten für die Erweiterung werden als
.oxt
Dateien gebündelt und können im LibreOffice Extensions repository geteilt werden.
- Erweiterungen sind das bevorzugte Mittel für Sysadmins, um die Standard Einstellungen zu modifizieren. Ein Handbuch für die Entwicklung von Konfigurations-Erweiterungen ist im PDF or ODT Format erhältlich. Ein Beispiel OXT configuration extension begleitet das Handbuch.
- Es gibt auch die speziellen Calc Erweiterungen Add-Ins, die weitere Tabellen-Funktionen zu Calc hinzufügen. Als UNO Komponente können sie neue Implementierungen von existierenden Funktionalitäten oder spezielle Komponenten wie Calc Add-Ins, Add-Ons, Daten-Piloten, Chart-Add-Ins oder linguistische Komponenten wie die Rechtschreibprüfung, den Silbentrenner oder den Thesaurus (siehe Add-Ins documentation) bereitstellen.
- Es können auch Erweiterungen für zusätzliche Vorlagen, Gallerien und Autotexte gepackt werden. Siehe die Beispiele im Abschnitt "Beispiel" weiter unten.
Über Vorlagen
Sie werden bemerken, dass in einigen Beispielen die Vorlagen im Ordner "templates" abgelegt werden, während sie in anderen Beispielen im Ordner "template" landen. Solange der passende Name in Paths.xcu eingetragen ist, funktionieren beide Ordner. In der Datei Paths.xcu bezieht sich das "%origin%"
wie in <node oor:name="%origin%/template" oor:op="fuse"/>
auf den Speicherort der Erweiterung nachdem sie installiert wurde. Z. Bsp.:
file:///<path-to-your-libreoffice-installation-or-config>/user/uno_packages/cache/uno_packages/lu168780135zflp.tmp_/<extenion_filename>.oxt
Dabei sollte "template" wie in <node oor:name="%origin%/template" oor:op="fuse"/>
relativ zum Wurzelverzeichnis der ausgepackten Erweiterung sein. Das bedeutet, dass, wenn die aktuelle Erweiterung in einem Ordner namens "my_templates" steckt, dann in der Path.xcu ein: <node oor:name="%origin%/my_templates" oor:op="fuse"/>
steht.
Ebenso steht das "Template" in <node oor:name="Template" oor:op="fuse" oor:mandatory="true">
im Path.xcu für die Kategorie "Template". Diese wird in unotools/source/config/pathoptions.cxx (zusammen mit Addin, AutoCorrect, AutoText, Dictionary, Gallery. etc.) definiert.
Resourcen
Um Redundanzen zu vermeiden kann auf die OpenOffice Dokumentation verwiesen werden. Siehe z. Bsp. die Version dieser Seite in der OpenOffice Wiki. Diese sind nach wie vor weitestgehendst kompatibel. Ein extra Check sollte trotzdem vorgenommen werden, da die Entwicklung von LibreOffice schnell voranschreittet (siehe Anmerkungen zur Kompatibilität weiter unten).
Für eine komplette Beschreibung der Erweiterungen und dem .oxt
Datei-Format siehe das Entwicklerhandbuch
Aktuelle Hinweise werden gerade auf den Hilfe Seiten zusammengefasst.
Vorm Loslegen muss das SDK installiert werden.
Tutorials und Beispiele
Für den Anfang bietet sich ein Blick in die Tutorials oder den Quelltext der Beispiel Erweiterung an. Der LibreOffice Quellcode hat auch eine Sammlung von SDK Beispielen. Ein anderer Weg zu Beispielen wäre, die .oxt
Datei einer existierenden Erweiterung auszupacken und den Inhalt zu studieren.
Basic
Java
- Start Erweiterung Start Erweiterung als Basis für eigene Erweiterungen.
- Seitenleisten Erweiterung Ähnlich der Start Erweiterung, diesmal zur Erstellung eines Seitenleisten Decks.
- NOA-libre ist ein objektorientierter Leichtgewicht-Wrapper um die LibreOffice UNO API. Dieser bietet eine höhere Abstraktion für viele UNO-Interfaces.
- UNOHelper bietet Hilfe-Funktionen zur Arbeit mit der UNO API. Er stellt oft gebrauchte Funktionen der UNO API zum leichteren Einsatz zur Verfügung.
- LibreOffice Template System (LOTS) ist eine große Java Erweiterung mit erweiterten Templates, Formularen und Autotext Funktionalitäten.
Eclipse Plugin
TDF bietet das Eclipse Plugin LOEclipse bei Entwicklungen von LibreOffice Erweiterungen / Komponenten in Java. Es steht im Eclipse Marketplace zur Verfügung.
Python
- unodit automatisiert einige der nervigen Aufgaben mit Dialogen beim Erstellen der eigenen Erweiterung in Python.
- der LibreOffice Liebesbrief Schreiber.
Siehe auch die Seiten zur Python Erweiterungs Entwicklung (engl.), zum Python Makro-Handbuch und zur Gestaltung und Entwicklung von Python Applicationen.
C++
- Libreoffice Entwicklung von Erweiterungen mit C++ - Teil 1 - Einführung in UNO (engl.);
- die LibreOffice Such-Erweiterung die einen Kontextmenüeintrag zur Online-Suche für den ausgewählten Text hinzufügt. (engl.)
Nicht-codierte Beispiele
- Andreas Mantkes github extensionbook Repository enthält eine Sammlung an nicht-codierten Beispielen die erklären, wie ein Set von Farben, Vorlagen, Auto-Text und Galleries in eine Erweiterung gepackt werden können.
- Kevin Suo's github lo_l10n_templates Repository ist ein Beispiel, wie ein Vorlagen-Set als LibreOffice Erweiterung erstellt wird und wie sie lokalisiert wird.
Anmerkungen zur Kompatibilität
Die LibreOffice Entwickler sind sehr konservativ, wenn es Änderungen in der public (UNO) API gibt. Daher arbeiten die meisten Erweiterungen für OpenOffice.org oder Apache OpenOffice immer noch mit LibreOffice. Wenn es Änderungen gibt, werden sie in ReleaseNotes/de (API Änderungen unter 4.2, 4.1 und 4.0) vermerkt.
- Die
OpenOffice.org-minimal-version
Angabe gibt an dass die Erweiterung sowohl in der angegebenen Version als auch in allen anderen Versionen von OpenOffice danach arbeitet. Alle LibreOffice Versionen bis zur Version 4.2.3 geben die Version 3.4, an während die Versionen ab 4.2.4 die Version 4.1 referenzieren. Diese Angabe gibt nur an, dass Funktionalitäten aus der angegebenen OpenOffice.org Version (und konsequenterweise in allen anderen Produkten, nicht nur in OpenOffice.org selbst) verwendet werden.
- Wenn eine Erweiterung spezifische Funktionalität von LibreOffice ab Version 3.5 nutzt, kann eine neue Angabe
LibreOffice-minimal-version
im Namensraumhttp://libreoffice.org/extensions/description/2011
verwendet werden. Der anzugebendevalue
-Wert (ohne Namensraum) gibt die mindeste LibreOffice Version an; er sollte keine Mikro-Versions-Nummer enthalten und sollte nicht vor Version3.5
liegen.
Der generell benötigtename
-Wert (mit Namensraumhttp://openoffice.org/extensions/description/2006
) sollte “LibreOffice version
” sein, wobeiversion
die geforderte Version ist.
Beispiele sind in core/tree/desktop/test/deployment/dependencies: loversion35.oxt oder loversion36.oxt zu finden.
- Wenn eine Erweiterung spezifische Funktionalität von LibreOffice ab Version 7.0 nutzt, kann eine neue Angabe
LibreOffice-minimal-version
im Namensraumhttp://libreoffice.org/extensions/description/2011
zusätzlich zur Angabe derLibreOffice-minimal-version
verwendet werden. Das sollte aber nur sehr selten nötig sein.