itext 1. Wprowadzenie 2. Przykłady i zastosowania.

Podobne dokumenty
JAVA W SUPER EXPRESOWEJ PIGUŁCE

Podstawy i języki programowania

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Podstawy programowania obiektowego

Programowanie obiektowe

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

Wykład 4: Klasy i Metody

Programowanie obiektowe

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Katalog książek cz. 2

Zakopane, plan miasta: Skala ok. 1: = City map (Polish Edition)

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie obiektowe

Laboratorium Programowania Kart Elektronicznych

Ćwiczenie 1. Przygotowanie środowiska JAVA

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Strumienie, pliki. Sortowanie. Wyjątki.

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

KLASY, INTERFEJSY, ITP

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java. Programowanie Obiektowe Mateusz Cicheński

Strumienie i serializacja

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Ćwiczenia 9 - Swing - część 1

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Projektowanie aplikacji internetowych laboratorium

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Wywoływanie metod zdalnych

akademia androida Składowanie danych część VI

1 Atrybuty i metody klasowe

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Wykład 2: Podstawy Języka

MaPlan Sp. z O.O. Click here if your download doesn"t start automatically

Zaawansowane programowanie w języku C++ Klasy w C++

Bezpieczne uruchamianie apletów wg

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Języki i metody programowania Java. Wykład 2 (część 2)

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Aplikacje RMI Lab4

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Podstawy obiektowości

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

Krok po kroku... (czyli jak stworzyć i wydrukować krzyżówkę)

PARADYGMATY PROGRAMOWANIA Wykład 4

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Platformy Programistyczne Zagadnienia sieciowe i wątki

Klasy abstrakcyjne i interfejsy

Rozdział 4 KLASY, OBIEKTY, METODY

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Grafika i komunikacja człowiek komputer Laboratorium. Część 3: Tekst, czcionki, kolory

Szablony klas, zastosowanie szablonów w programach

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Klasy i obiekty cz I Klasy, obiekty, podstawy używania obiektów

Podstawy programowania obiektowego

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Wykład 8: Obsługa Wyjątków

Programowanie 2. Język C++. Wykład 3.

Wywoływanie metod zdalnych

Wykład 5_2 Arkusze stylów dziedziczenie. Technologie internetowe Zofia Kruczkiewicz

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Wykład 10: Wejście i Wyjście

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Aplikacje RMI

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Aplikacje w środowisku Java

Podstawy i języki programowania

Visual Studio instalacja

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Podstawy Języka Java

Tworzenie i wykorzystanie usług sieciowych

Programowanie Komputerów

Aplikacja wielowątkowa prosty komunikator

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Klasy abstrakcyjne, interfejsy i polimorfizm

Katowice, plan miasta: Skala 1: = City map = Stadtplan (Polish Edition)

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

SG-MICRO... SPRĘŻYNY GAZOWE P.103

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Wybrane algorytmy tablicowe

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

JAVA I SIECI. MATERIAŁY:

Transkrypt:

1 itext 1. Wprowadzenie 2. Przykłady i zastosowania.

2 Wprowadzenie Biblioteka itext (http://itextdocs.lowagie.com/) służy głównie do tworzenia dokumentów PDF przez programy napisane w Javie. Jej dodatkowe możliwości to obsługa formatów RTF i HTML.

PDF w pięciu krokach Aby utworzyć dokument w formacie pdf należy wykonać następujące czynności: stworzyć instancje (obiekt) com.lowagie.text.document: Document document = new Document(); powiązać dokument ze strumieniem wyjściowym: PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf")); otworzyć dokument: document.open(); wprowadzić zawartość dokumentu: document.add(new Paragraph("Hello World")); zamknąć dokument: document.close(); 3

PDF w pięciu krokach import java.io.*; import com.lowagie.text.*; import com.lowagie.text.pdf.pdfwriter; public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World"); // krok 1 Document document = new Document(); try { // krok 2 PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf")); // krok 3 document.open(); // krok 4 document.add(new Paragraph("Hello World")); } catch (DocumentException de) { System.err.println(de.getMessage()); } catch (IOException ioe) { System.err.println(ioe.getMessage()); } // krok 5 document.close(); } } 4

5 Krok 1: konstruktor Document Klasa com.lowagie.text.document posiada trzy konstruktory: public Document(Rectangle pagesize, int marginleft, int marginright, int margintop, int marginbottom); public Document(Rectangle pagesize); równoważny wywołaniu Document(Rectangle pagesize, 36, 36, 36, 36); public Document(); równoważny wywołaniu Document(PageSize.A4);

6 Krok 1: konstruktor Document Rozmiary stron są typu Rectangle. W ramach klasy com.lowagie.text.pagesize: zdefiniowano większość podstawowych rozmiarów: A0-A10, LEGAL, LETTER, HALFLETTER, _11x17, LEDGER, NOTE, B0-B5, ARCH_A-ARCH_E, FLSA and FLSE. Większość z powyższych formatów jest typu portrait. Aby utworzyć dokument typu landscape należy zdefiniować wysokość mniejszą od szerokości. Można również użyć metody rotate(): Document document = new Document(PageSize.A4.rotate());

7 Krok 1: konstruktor Document Można tworzyć także dokumenty mieszane. Document document = new Document(PageSize.A4.rotate()); document.open(); document.add(new Paragraph("Ta strona jest typu landscape")); document.setpagesize(pagesize.a4); document.newpage(); document.add(new Paragraph("Ta natomiast znowu portrait")); itext pozwala tworzyć strony o dowolnych rozmiarach, nie przekraczających 200'' na 200''. Należy pamiętać, ze Acrobat w wersji 3.0 dopuszcza maksymalnie 45'' na 45''.

8 Krok 1: konstruktor Document Wraz z rozmiarem strony można określić także kolor tła: Rectangle pagesize = new Rectangle(216, 720); pagesize.setbackgroundcolor(new java.awt.color(0xff, 0xFF, 0xDE)); Document document = new Document(pageSize); document.open(); document.add(new Paragraph("Rozmiar strony to 216x720 punktów")); document.add(new Paragraph("co daje 3 na 10 cali")); document.add(new Paragraph("czyli 7.62 na 25.4 cm")); document.add(new Paragraph("Użyty kolor tla to #FFFFDE."));

Krok 2: powiązanie dokumentu z plikiem DocWriter Obecnie istnieją trzy formaty zapisu dokumentu: PdfWriter generuje dokument w formacie PDF (Portable Document Format), RtfWriter generuje dokument w formacie RTF (Rich Text Format), HtmlWriter generuje dkolument w formacie HTML. Wszystkie te klasy są wyprowadzone z klasy abstrakcyjnej DocWriter. Konstruktor jest chroniony więc jedyna możliwość związania dokumentu z plikiem to wywołanie metody: public static xxxwriter getinstance(document document, OutputStream os) throws DocumentException (xxx oznacza Pdf, Rtf lub Html). 9

Krok 2: powiązanie dokumentu z plikiem DocWriter PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf")); Obiekt writer w typowych zastosowaniach nie jest nigdy używany. Drugi parametr jest dowolnym strumieniem wyjściowym (java.io.outputstream). Najczęsciej używane: java.io.fileoutputstream zapis do pliku, java.io.bytearrayoutputstream tworzenie dokumentu w pamięci operacyjnej, javax.servlet.servletoutputstream generowanie pdf'a przez serwer www, System.out niezbyt ciekawe rozwiązanie. 10

11 Krok 2: powiązanie dokumentu z plikiem DocWriter Do jednego dokumentu można utworzyć wiele DocWriter'ów. Document document = new Document(); PdfWriter pdf = PdfWriter.getInstance(document, new FileOutputStream("HelloWorldPdf.pdf")); RtfWriter2 rtf = RtfWriter2.getInstance(document, new FileOutputStream("HelloWorldRtf.rtf")); HtmlWriter html = HtmlWriter.getInstance(document, new FileOutputStream("HelloWorldHtml.html")); document.open(); document.add(new Paragraph("Hello World")); // pojawi sie we wszystkich plikach pdf.pause(); rtf.pause(); // dalsze rzeczy pojawia sie tylko w HTML'u

12 Krok 2: powiązanie dokumentu z plikiem DocWriter Anchor pdfref = new Anchor("see Hello World in PDF."); pdfref.setreference("./helloworldpdf.pdf"); Anchor rtfref = new Anchor("see Hello World in RTF."); rtfref.setreference("./helloworldrtf.rtf"); document.add(pdfref); document.add(chunk.newline); document.add(rtfref); pdf.resume(); rtf.resume(); // dalsze rzeczy pojawia sie znów we wszystkich plikach

13 Krok 3: otwarcie dokumentu Istnieje szereg czynności, które można zrobić wyłącznie przed otwarciem dokumentu. Najczęściej wykorzystywane to: szyfrowanie dokumentu: Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("HelloEncrypted.pdf")); writer.setencryption(pdfwriter.strength128bits, "Hello", "World", PdfWriter.AllowCopy PdfWriter.AllowPrinting); document.open(); document.add(new Paragraph("Hello World"));

Krok 3: otwarcie dokumentu dodatkowe informacje o dokumencie można ustawić za pomocą odpowiednich metod, np: Tytuł: Autor: Temat: Słowa kluczowe: Application: Producent: Data utworzenia: addtitle(java.lang.string) addauthor(java.lang.string) addsubject(java.lang.string) addkeywords(java.lang.string) addcreator(java.lang.string) addproducer(java.lang.string) addcreationdate(java.util.date) 14

15 Krok 3: otwarcie dokumentu document.addtitle("hello World example"); document.addauthor("bruno Lowagie"); document.addsubject("this example explains how to add metadata."); document.addkeywords("itext, Hello World, step 3, metadata"); document.addcreator("my program using itext");

Krok 3: otwarcie dokumentu 16

17 Krok 4: zawartość dokumentu itext zawiera zestaw własnych "obiektów wysokiego poziomu" które są odwzorowywane na konkretne elementy PDF'a. Najpopularniejsze z nich to: Chunk najmniejszy fragment (jednostka) dokumentu: Chunk fox = new Chunk("quick brown fox"); float superscript = 8.0f; fox.settextrise(superscript); fox.setbackground(new Color(0xFF, 0xDE, 0xAD)); Chunk jumps = new Chunk(" jumps over "); Chunk dog = new Chunk("the lazy dog"); float subscript = -8.0f; dog.settextrise(subscript); dog.setunderline(new Color(0xFF, 0x00, 0x00), 3.0f, 0.0f, -5.0f + subscript, 0.0f, PdfContentByte.LINE_CAP_ROUND);

18 Krok 4: zawartość dokumentu document.add(fox); document.add(jumps); document.add(dog); Efekt:

19 Krok 4: zawartość dokumentu Paragraph zbiór (kontener) dla innych elementów dokumentu: Paragraph p = new Paragraph(); p.add(new Chunk("This text is in Times Roman. This is ZapfDingbats: ", new Font(Font.TIMES_ROMAN, 12))); p.add(new Chunk("abcdefghijklmnopqrstuvwxyz", new Font(Font.ZAPFDINGBATS, 12))); p.add(new Chunk(". This is font Symbol: ", new Font(Font.TIMES_ROMAN, 12))); p.add(new Chunk("abcdefghijklmnopqrstuvwxyz", new Font(Font.SYMBOL, 12))); document.add(new Paragraph(p));

20 Krok 4: zawartość dokumentu W ramach paragrafu można ponadto określić m. in.: justowanie Element.ALIGN_LEFT, Element.ALIGN_CENTER, Element.ALIGN_RIGHT, Element.ALIGN_JUSTIFIED, odstępy między znakami setspacecharratio() (domyślnie 2.5): writer.setspacecharratio(pdfwriter.no_space_char_ratio); wcięcia: setindentationleft(float indentation), setindentationright(float indentation), setspacingbefore(float spacing), setspacingafter(float spacing).

Krok 4: zawartość dokumentu Phrase może być używana zamiennie z Paragraph: Phrase phrase0 = new Phrase(); Phrase phrase1 = new Phrase("(1) this is a phrase\n"); Phrase phrase2 = new Phrase(24, "(2) this is a phrase with leading 24. You can only see the difference if the line is long enough. Do you see it? There is more space between this line and the previous one.\n"); Phrase phrase3 = new Phrase("(3) this is a phrase with a red, normal font Courier, size 20. As you can see the leading is automatically changed.\n", FontFactory.getFont(FontFactory.COURIER, 20, Font.NORMAL, new Color(255, 0, 0))); Phrase phrase4 = new Phrase(new Chunk("(4) this is a phrase\n")); Phrase phrase5 = new Phrase(18, new Chunk("(5) this is a phrase in Helvetica, bold, red and size 16 with a given leading of 18 points.\n", FontFactory.getFont(FontFactory.HELVETICA, 16, Font.BOLD, new Color(255, 0, 0)))); Phrase phrase6 = new Phrase("(6)"); Chunk chunk = new Chunk(" This is a font: "); phrase6.add(chunk); 21

Krok 4: zawartość dokumentu phrase6.add(new Chunk("Helvetica", FontFactory.getFont( FontFactory.HELVETICA, 12))); phrase6.add(chunk); phrase6.add(new Chunk("Times New Roman", FontFactory.getFont( FontFactory.TIMES_ROMAN, 12))); phrase6.add(chunk); phrase6.add(new Chunk("Courier", FontFactory.getFont( FontFactory.COURIER, 12))); phrase6.add(chunk); phrase6.add(new Chunk("Symbol", FontFactory.getFont(FontFactory.SYMBOL, 12))); phrase6.add(chunk); phrase6.add(new Chunk("ZapfDingBats", FontFactory.getFont( FontFactory.ZAPFDINGBATS, 12))); Phrase phrase7 = new Phrase("(7) if you don't add a newline yourself, all phrases are glued to eachother!"); document.add(phrase1); document.add(phrase2); document.add(phrase3); 22

23 Krok 4: zawartość dokumentu document.add(phrase5); document.add(phrase6); document.add(phrase7);

24 Krok 4: zawartość dokumentu document.add(new Phrase(16, "\n\n\n")); document.add(new Phrase(-16, "Hello, this is a very long phrase to show you the somewhat odd effect of a negative leading. You can write from bottom to top. This is not fully supported. It's something between a feature and a bug."));

25 Krok 4: zawartość dokumentu document.add(phrase.getinstance("what is the " + (char) 945 + "-coefficient of the " + (char) 946 + "-factor in the " + (char) 947 + "-equation?\n")); for (int i = 913; i < 970; i++) { } document.add(phrase.getinstance(" " + String.valueOf(i) + ": " + (char) i));

26 Krok 5: zamknięcie dokumentu Zamknięcie dokumentu (document.close()) powoduje wyczyszczenie i zapisanie strumieni wyjściowych związanych z dokumentem. Metoda close() jest także wywoływana automatycznie podczas usuwania obiektu, jednak powinno się ją wywoływać samodzielnie.

27 Zamiast podsumowania http://itextdocs.lowagie.com/tutorial/