Z przekazaniem projektu OpenOffice.org do Fundacji Apache, było wiele zgrzytów i niezadowolenia społeczności. Emocji dodaje również coraz większe oddalanie się od siebie LibreOffice i OpenOffice.org. Tymczasem ciekawy projekt – ODF Toolkit, trafił pod skrzydła Fundacji Apache. Jest to zestaw narzędzi oraz bibliotek napisanych w Javie, które służą do pracy z dokumentami ODF. Oprogramowanie to przeznaczone jest głównie dla programistów, którzy potrzebują wykonać dowolne operacje na dokumencie ODF. Potrafi ono manipulować treścią dokumentu, generować raporty, wyciągać informacje, czy sprawdzać poprawność dokumentu. Idealnie nadaje się do uruchomienia na serwerze.

W przeciwieństwie do zamkniętych formatów, ODF jest otwartym standardem i korzystając z wielu aplikacji, możemy swobodnie zapisywać i odczytywać tego typu dokumenty. Niestety pisanie oprogramowania, które to wykona jest ciężkim zadaniem. Dlatego tę czynność może wykonać ODF Toolkit, który bardzo upraszcza sprawę.

Generowanie przykładowego dokumentu

Do rozpoczęcia pracy będzie nam potrzebna Java 1.5 lub wyższa w wydaniu SDK (Software Development Kit). Pozostałe pliki jakie musimy pobrać to:

  1. Simple ODF 0.6.6
  2. ODFDOM 0.8.7
  3. Apache Xerces2 Java

Po ściągnięciu i rozpakowaniu plików, kopiujemy je (odfdom-java-0.8.7.jar, simple-odf-0.6.6.jar, xercesImpl.jar) do katalogu lib w naszym projekcie. W katalogu z projektem tworzymy plik OSWorld.java i umieszczamy w nim kod:

// Importujemy potrzebne klasy
import java.net.URI;
import org.odftoolkit.simple.TextDocument;
import org.odftoolkit.simple.table.Cell;
import org.odftoolkit.simple.table.Table;
import org.odftoolkit.simple.text.list.List;
import org.odftoolkit.simple.text.Paragraph;
import org.odftoolkit.simple.draw.Frame;
import org.odftoolkit.simple.draw.Image;
import org.odftoolkit.simple.style.StyleTypeDefinitions.*;
import org.odftoolkit.simple.draw.FrameStyleHandler;
import org.odftoolkit.simple.style.Font;
import org.odftoolkit.simple.style.StyleTypeDefinitions;

public class OSWorld {
	public static void main(String[] args) {
		TextDocument outputOdt;
		try {
			// Tworzymy nowy dokument tekstowy
			outputOdt = TextDocument.newTextDocument();			
			// Dodajemy obrazek w pierwszym paragrafie
			Paragraph para = outputOdt.getParagraphByIndex(0, false);
			Image image = Image.newImage(para, new URI("osworld.png"));
			// Ustawiamy jego tytuł oraz opis
			image.setTitle("Lorem ipsum");
			image.setDescription("Praesent faucibus tempor ultricies. Maecenas aliquet cursus leo.");
			// Ustawiamy jego pozycję oraz zakotwiczenie na stronie
			image.setVerticalPosition(FrameVerticalPosition.TOP);
			FrameStyleHandler handler = image.getStyleHandler();
			handler.setAchorType(AnchorType.AS_CHARACTER);
			
			// Dodajemy kolejny paragraf
			outputOdt.addParagraph("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris congue neque eu tellus egestas fermentum. In magna libero, aliquet sagittis faucibus sed, malesuada vel odio. Donec consectetur volutpat pretium. Ut molestie iaculis rhoncus. Proin lobortis placerat ultricies. Etiam porttitor, justo at porttitor mattis, urna orci scelerisque dolor, non interdum dolor purus a neque. Nulla volutpat, dolor eu hendrerit venenatis, metus lectus tincidunt leo, mattis suscipit erat dui eu tortor. ");
			// Ustalamy jego pozycję, pogrubienie.
			Paragraph para1 = outputOdt.getParagraphByIndex(1, false);
			Font font = para1.getFont();
			font.setFontStyle(StyleTypeDefinitions.FontStyle.BOLD );
			para1.setFont(font);
			HorizontalAlignmentType align = para1.getHorizontalAlignment();
			para1.setHorizontalAlignment(HorizontalAlignmentType.JUSTIFY);
			outputOdt.addParagraph("");
			outputOdt.addParagraph("Praesent faucibus tempor ultricies. Maecenas aliquet cursus leo, viverra malesuada turpis volutpat sed. Nam et mauris turpis, vel cursus dolor. Praesent ut consectetur risus. Nunc venenatis aliquam egestas. Donec vel justo dolor. Proin nec vehicula nisl. Mauris pulvinar laoreet metus, vitae lacinia augue eleifend vel. Nam consequat, quam non pretium convallis, quam libero lacinia nibh, non consectetur tellus enim consectetur ante. Phasellus leo purus, rhoncus sit amet ultricies eu, ultrices eu lorem. Duis ac sapien sit amet massa consequat ornare scelerisque at mauris. Ut nulla nunc, auctor a commodo ac, blandit non nisi.");
			outputOdt.addParagraph("");

			// Dodajemy listę pod koniec dokumentu
			outputOdt.addParagraph("Lorem ipsum dolor sit amet:");
			List list = outputOdt.addList();
			String[] items = {"Suspendisse", "Phasellus", "Donec", "Quisque", "Praesent"};
			list.addItems(items);		

			// Dodajemy tablekę
			Table table = outputOdt.addTable(2, 2);
			Cell cell = table.getCellByPosition(0, 0);
			cell.setStringValue("Hello World!");
			
			// Zapisujemy do pliku
			outputOdt.save("OSWorld.odt");
		} catch (Exception e) {
			System.err.println("ERROR: unable to create output file.");
		}
	}
}

Teraz wystarczy skompilować i uruchomić projekt, a powinien zostać wygenerowany dokument OSWorld.odt:

javac -cp lib/odfdom-java-0.8.7.jar:lib/simple-odf-0.6.6.jar:lib/xercesImpl.jar:. OSWorld.java
java -cp lib/odfdom-java-0.8.7.jar:lib/simple-odf-0.6.6.jar:lib/xercesImpl.jar:. OSWorld

Wygenerowany dokument:
OSWorld - Dokument wygenerowany przez ODF Toolkit

Przykładowy kod oraz pliki z tego projektu dostępne są do pobrania z archiwum OSWorld-ODF.tar.gz.

Szczegółowe informacje na temat wykorzystania projektu dostępne są w oraz na stronie z przykładami.

Podobne artykuły

  • o_O

    > outputOdt.addParagraph("");

    Ciekawe podeście do formatowania dokumentu ;)

    • Greg

      No zwykłe…. tak jakby dać enter programie. So?

    • o_O

      Raczej 2 entery. Jeden kończy pełny paragraf, a kolejny kończy pusty.

      I tak się nie robi. Poprawnie ustalasz w stylu odstęp pomiędzy akapitami.

      Potem przy takiej edycji są ciągle puste linie na początku strony, już nie mówiąc o utrudnianiu działania inteligentnych metod składania tekstu (np. niezostawianie jednej linii akapitu na poprzedniej stronie).

    • Kasia Nowicka

      Nie no jasne, ale jak pisze podanie na uczelnię i klikam drukuj to nie bawie sie w takie pirdoły. Enter enter drukuj i skasowany plik.

  • Michallo

    Super, dokładnie czegoś takiego poszukiwałem. Dobra dokumentacja :)

  • quest

    ODF Toolkit to nie tylko Java, ale i inne technologie. Ze strony domowej:

    Libraries for reading and writing ODF documents programmatically.

    ODFDOM, Java

    AODL, .NET ( C# )

    Simple Java API for ODF, Java

    http://odftoolkit.org/

    Poza tym, jest też WebODF.

    https://demo.webodf.org/demo/

    • Kreton

      Ale większość to Java a .NET wali microsoftem :)

  • mikolajS

    Świetna sprawa. Można na stronie zamiast pdf generować dokument ODF :)

    • Można i jest to o tyle fajnie, że można wygenerować plik do edycji (np. jakieś podanie). Równie dobrze można zaczytać jakiś plik tekstowy, który zostanie sformatowany.

  • Pingback: Rob Weir wyjaśnia zmartwychwstanie OpenOffice’a | OSWorld.pl()