= Templates mit JodReports =

JodReports ist eine Template-Engine für OpenOffice-Dokumente, die FreeMarker als Basis benutzt. Man findet es unter http://jodreports.sourceforge.net . Man kann es gut von Java aus aufrufen, sollte es aber grundsätzlich auch standalone benutzen können.

Was heisst das nun? Man kann ein ganz gewöhnliches ODF-Dokument zu einem Template machen, das dann durch einen Programmlauf ausgefüllt wird. Hiermit kann man z.B. Formulare füllen, Serienbriefe erstellen oder Datenbank-Reporte erzeugen. Dabei benutzt man nicht irgendwelche Makro-Funktionen von OpenOffice - man benötigt dazu eigentlich noch nicht einmal ein installiertes ~OpenOffice (erlaubt also z.B. auch die Dokumentengenerierung auf einem Server). Stattdessen benutzt man die Template-Sprache von FreeMarker. Es erlaubt dadurch auch das Erzeugen von komplexeren Templates z.B. zum Erzeugen von Listen, bedingten Blöcken etc.

Ich habe damit in einem Projekt einen OpenOffice-Server als Reportgenerator (als Alternative zu JasperReports) eingesetzt. Das Ganze funktioniert ganz gut, bedarf allerdings im Vergleich grosser Sorgfalt bei der Erstellung der Templates ''(Bei Fehlern in der Templatesprache sind die Fehlermeldungen meistens nicht hilfreich)''. Ein Vorteil ist hingegen, daß ein einmal erstelltes Template auch von Dummusern sehr leicht angepasst werden kann. -- ThomasBayen

Selbstverständlich sind auch Schleifen, bedingte Formatierung, etc. möglich. Allerdings muss man dabei sehr sorgfältig vorgehen, um keine Fehler in das Dokument einzubauen.

Übrigens gibt es auch ein Schwesterprojekt, daß erlaubt, die erzeugten ODF-Dateien in PDF-Dokumente umzuwandeln. Dieses benötigt dann allerdings irgendwo ein herumliegendes OpenOffice (ggf. im sogenannten Server-Mode).



== Tips & Tricks ==

* Am besten sollte man alle Template-Befehle bis auf die ganz trivialen Einfügungen (d.h. Eingabefelder, wenn man sicher ist, daß sie nicht null ergeben) in ein '''Eingabefeld''' packen (siehe hierzu die Doku).

* In der [Doku|http://jodreports.sourceforge.net/?q=node/24] steht, wie man Template-Befehle in Eingabefelder packt. Das dort beschriebene '''"Reference Field"''' heisst im deutschen "Hinweis". Da musste ich erstmal drauf kommen und später kann man dessen Wert nicht mehr ändern.

* Man darf keine Werte einfügen, die '''null''' sind. Wer das dennoch möchte, darf die FreeMarker-Syntax für default-Werte hierzu benutzen: {{$name!' '}}. Die Benutzung von "'" ist aber nur in Eingabefeldern, nicht direkt im Dokumententext möglich.

* Die FreeMarker-Syntax erlaubt gleichwertig einfache und '''doppelte Anführungszeichen'''. Die doppelten können allerdings in OpenOffice nicht eingegeben werden. Scheinbar werden dort immer irgendwelche anderen Anführungszeichen aus den Weiten des UTF8-Zeichenraumes benutzt. Wer unbedingt doppelte Anführungszeichen verwenden will, kann das aber auch. Dazu ruft man im normalen Text das Menü "Einfügen -> Sonderzeichen" auf. Das Zeichen, was wir suchen, steht direkt in der ersten Zeile. Das fügt man in den Text ein, dann kopiert man es. Nun geht man in den Editor für Eingabefelder und fügt das Zeichen dort ein. Es sieht genauso aus wie das, was man mit "Shift-2" erzeugt, ist aber offensichtlich ein anderes.



== Alternativen ==

Einen ähnlichen Ansatz verfolgt das Projekt http://odftoolkit.org/, das u.a. von IBM unterstützt wird. Es erlaubt die komplexe Manipulation von ODF-Dokumenten. Allerdings bietet es keine auch für einfache User so einfach zu nutzende Template-Sprache. Außerdem kann man auch damit keine Dokumente drucken (bzw. in PDF wandeln).

Interessant könnte auch http://www.jopendocument.org/ sein. Es scheint vor allem im Hinblick auf Spreadsheet-Dateien entwicklet worden zu sein. Es erlaubt auch das Drucken ohne ein installiertes OpenOffice (allerdings wohl auch nur für Spreadsheets).

Ein etwas neueres Projekt ist XDocReport. Es bietet eine ähnliche Funktionalität wie JodReports. Dafür unterstützt es allerdings auch Microsoft Office Dokumente. Außerdem bietet es ein Plugin für LibreOffice, um einfacher Felder in einem Dokument setzen zu können.


----
[{Tag Java Templates}]