sobota, 4 grudnia 2010

Generacja dokumentów za pomocą szablonów ODT (JODReports)

Chciałbym dziś pokazać prosty przykład jak łatwo możemy generować dokumenty *.odt na podstawie szablonów, z wykorzystaniem biblioteki JODReports. Biblioteka ta pozwala nam tworzyc dokumeny z dynamicznie generowaną treścią. Najłatwiej będzie zademonstrować to na przykładzie, a więc zaczynamy...

Najpierw potrzebujemy szablon dokumentu programu OpenOffice. Tworzymy nowy dokument i wypełniamy go dowolną treścią. W miejsu gdzie chcemy podstawić dane generowane dynamicznie stosujemy specjalne zmienne: ${nazwa_zmiennej}. Dokument możemy formatować dowolnie według naszych potrzeb.

Przykładowa treść:

listing pliku: template.odt
Pan ${dluznik} ma wpłacić zaległość za fakturę nr ${nr_faktury}, firmie ${nazwa_firmy} w kwocie ${kwota} zł.


Kolejnym etapem jest wygenerowanie dokumentu na podstawie powyższego szablonu. Będziemy tutaj potrzebowali biblioteki JODReports. Tworzymy prosty program w Javie, który podstawi nam odpowiednie wartośći w miejscu wystąpienia zmiennej w szablonie.

listing pliku: GenerateDocument.java
import java.awt.Desktop;
import java.io.File;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
import net.sf.jooreports.templates.DocumentTemplate;
import net.sf.jooreports.templates.DocumentTemplateFactory;

public class GenerateDocument
{
    public static void main(String[] args) throws Exception
    {
        File templateFile = new File("template.odt"); //plik szablonu
        File outputFile = new File("document.odt"); //plik wynikowy

          DocumentTemplate template = template = new DocumentTemplateFactory().getTemplate(templateFile); //tworzymy szablon

        Map data = new HashMap(); //mapa zmiennych i ich wartosci
        data.put("nazwa_firmy", "\"Computers\"");
        data.put("nr_faktury", "AF4563/11/2010");
        data.put("dluznik", "Jan Kowlaski");
        data.put("kwota", "358,56");

        template.createDocument(data, new FileOutputStream(outputFile)); //genruje nowy dokument na podstawie szablonu i danych z mapy

          Desktop.getDesktop().open(outputFile); //otwieramy wygenerowany plik
    } 
}

Uruchomienie powyższego programu utworzy nam nowy dokument na podstawie szablonu. Poniżej wynik takiego uruchomienia:

listing pliku: document.odt
Pan Jan Kowlaski ma wpłacić zaległość za fakturę nr AF4563/11/2010, firmie "Computers" w kwocie 358,56 zł.

Wykorzystanie tej biblioteki pozowoli na zautomatyzowanie tworzenia dokumentów o stałej treści np. dla różnych klientów. Wartości zmiennych możemy wyciągać z bazy danych, pliku, itp. W przypadku gdy nie chcemy, bądź nie mamy czasu na pisanie w Javie mechanizmów odpowiedzialnych za wydruk dokumentów, formularzy, możemy wykorzystać pakiet OpenOffice do stworzenia takiej funkcjonalności właśnie dzieki wykorzystaniu szablonów. Na zakończenie dodam że biblioteka JODReports obsługuje również pliki z rozszerzeniem *.ods(arkusz kalkulacyjny).

1 komentarz:

  1. Mi niestety nie działa:(
    Exception in thread "main" java.lang.NoClassDefFoundError: freemarker/template/Configuration
    at net.sf.jooreports.templates.DocumentTemplateFactory.(DocumentTemplateFactory.java:17)
    at GenerateDocument.main(GenerateDocument.java:16)
    Caused by: java.lang.ClassNotFoundException: freemarker.template.Configuration
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 2 more

    OdpowiedzUsuń