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).
Mi niestety nie działa:(
OdpowiedzUsuń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