Open Source im professionellen Einsatz

Office-Beans der Versionen 1 und 2

Das Office-Bean dient dem Einbetten der Office-Funktionalität in Java-Programme. Es wird zwar im noch aktuellen Developer\'s Guide von Open Office 1.1 beschrieben (Kapitel 16), doch ist diese Version nur umständlich einzusetzen. Das hat nichts damit zu tun, dass das Open Office Application Programming Interface in irgendeiner Form schlecht wäre - im Gegenteil, allen Unkenrufen zum Trotz ist das API gut dokumentiert und sehr zielstrebig.

Laut Michael Hönnig, dem Projektleiter für das Open-Office-API, gibt es drei Gründe, warum Entwickler für Version 1.1 das Office-Bean in wesentlichen Teilen neu schreiben müssen:

  • Es ist keine offizielle Basisklasse:
    »BasicOfficeBean« existiert nur als SDK-Beispiel. Ihm
    fehlen wichtige Methoden und Parameter (zum Beispiel die Optionen
    für »loadComponentFromURL«) und die
    Fehlerbehandlung ist nur rudimentär implementiert. Da viele
    Programmierer die Klasse individuell anpassen, kann Sun keine
    allgemeinen Bugfixes dafür liefern.
  • Es ist mit dem alten Bean nicht möglich, die
    Window-Parent-Beziehung wieder aufzuheben, wenn zum Beispiel eine
    AWT-Komponente aus ihrem Parent entfernt wurde. Auch das Beenden
    des Programms gestaltet sich schwierig, weil dafür eine
    bestimmte Reihenfolge vorgeschrieben ist. Eine entsprechende
    Änderung im SDK ist allerdings schon in neueren Versionen von
    Open Office 1.1.x eingeflossen.
  • Abstürze und Hänger in Open Office machen das
    Java-Bean unbenutzbar, manchmal stirbt sogar das AWT.

Open Office 2 behebt all diese Probleme. Das Office-Bean ist damit zu einer offiziellen Komponente geworden. Java-Entwickler können mit ihm Programme schreiben, die Suns Originalklasse einfach benutzen.

Listing 1: Speichern
vorbereiten

01 public synchronized void saveToStream(java.io.OutputStream o)
02    throws java.io.IOException
03 {
04    removeXSelectionChangeListener();
05    super.save(o);
06    postInitListenersEvent();
07 }

Listing 2: Speichern

01 FileOutputStream o = null;
02 try {
03     o = new FileOutputStream("/tmp/MeinDokument.sxw");
04 } catch (FileNotFoundException ex) {
05     ex.printStackTrace();
06 }
07 try {
08     officeWriter1.saveToStream(o);
09     o.close();
10 } catch (IOException ex1) {
11     ex1.printStackTrace();
12 }

Listing 3: Einfaches
Drucken

01 com.sun.star.view.XPrintable xPrintable =  (com.sun.star.view.XPrintable)  com.sun.star.uno.UnoRuntime.queryInterface(com.sun.star.view.XPrintable.class,
02         officeWriter1.getTextDocument());
03 
04 try {
05     xPrintable.print(null);
06 } catch (Exception ex1) {
07     ex1.printStackTrace();
08 }

Einschränkungen beim Gebrauch des Office-Bean

Aber auch in Open Office 2 gibt es einige Dinge, die zu beachten sind. Da es sich um ein natives Programm handelt, führt die Java Virtual Machine die Swing-Zeichenoperationen in der Regel optisch hinter der Darstellung von Open Office aus. In der Praxis heißt dies, dass ein Swing-Popup nur über einem Office-Bean gezeichnet werden kann, es sei denn, das Popup benutzt native Zeichenfunktionen.

Dies tut es, wenn man es als so genanntes Heavy-Weight zeichnen lässt, was aber nicht für alle Komponenten funktioniert, siehe[4]. Die Alternative besteht darin, alle grafischen Elemente nativ zu zeichnen, also in der Regel mit dem Abstract Window Toolkit (AWT). Profis könnten durchaus auch mit einer Einbettung in das Standard Widget Toolkit (SWT) Erfolg haben, für das jedoch keine Quelltextbeispiele existieren.

Alle Aktionen mit UNO setzen beim Endanwender ein Open Office voraus, das mit speziellen Optionen gestartet wird oder dessen Einstellungsdatei die Fernsteuerung erlaubt, siehe[3].

Abbildung 1:  In einer Java-Anwendung eingebetteter Open-Office-Writer ohne ausgefeiltes Menü.

Abbildung 1:  In einer Java-Anwendung eingebetteter Open-Office-Writer ohne ausgefeiltes Menü.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook