WordML (Office Open XML) mit Bildern aus XML erzeugen

Dafür hatten wir eine Lösungsidee. Durch Programmierung in Java lassen sich Höhe und Breite von Bildern einfach ermitteln (java.awt.image.BufferedImage) und von einer selbstgeschriebenen Erweiterung in XSLT überführen. Und das ist uns auch erfolgreich gelungen.

Wir haben das umgesetzt und eine eigene Erweiterung namens PicMe (Picture Metadata) programmiert, die alle Bildformate erkennt, die java.awt.image.BufferedImage unterstützt. Zur Überführung haben wir für XSLT Knoten gebaut, die dort mittels XPath zugänglich sind. Anbei präsentieren wir hier ein Beispiel:

Ausschnitt aus XSLT

<xslt:variable name="breite" select="round(number(/invitation/picture/@scale) * number(PicMe:getXMLMetaData(string(/invitation/picture/@file))/width))"/> <xslt:variable name="hoehe" select="round(number(/invitation/picture/@scale) * number(PicMe:getXMLMetaData(string(/invitation/picture/@file))/height))"/> <v:shape id="_x0000_i1025" type="#_x0000_t75" style="width:{$breite}px;height:{$hoehe}px; mso-position-horizontal:absolute"> <v:imagedata src="{/invitation/picture/@file}"/> </v:shape>

Ausschnitt aus XML (siehe auch weitere Invitation-Beispiele)

<invitation> <picture file="birthday.jpg" scale="0.3"/> ...

Ausschnitt aus dem Ergebnis (WordML / Office Open XML)

<v:shape style="width:246px;height:307px;mso-position-horizontal:absolute" type="#_x0000_t75" id="_x0000_i1025"> <v:imagedata src="birthday.jpg"/> </v:shape>

Probleme mit fehlerhaften Bilddaten

Die Funktionsweise unserer XSLT-Erweiterung hängt natürlich von der Güte der Java-Bibliothek ab. Bei den Tests sind wir auf ein Problem gestoßen, das in der offiziellen Bug-Liste geführt wird. Der aktuelle Stand besagt, dass der Bug kein wirklicher Bug ist, sondern fehlerhafte Daten (in unserem Fall in einer Jpeg-Datei) das Problem verursachen. Da es um fehlerhafte Daten geht, ist nicht mit einer Lösung in Java zu rechnen...