<?php require('fpdf.php'); $nazwa_pliku='gimnazjum.csv'; $plik=fopen($nazwa_pliku,"r"); $pdf=new FPDF('P','mm','A4'); $pdf->addfont('mtcorsva','b','mtcorsva.php'); $pdf->addfont('my_arial','','arial.php'); $pdf->addfont('my_arialbd','','arialbd.php'); Dynamiczne for($i=0;$i<3;$i++) { $kategoria*2+='szkoła ponadgimnazjalna'; $szkola*0+='szkoła Podstawowa nr 2 generowanie im. Marii Dąbrowskiej w Ostrzeszowie'; $szkola[1]='gimnazjum nr 16 w Szczecinie'; $szkola*2+='zespół Szkół Zawodowych nr 1 im. Józefa Psarskiego w Ostrołęce'; dokumentów PDF $koncowka=substr($imie,-1,1); if($koncowka=='a') $kto='została laureatką'; else $kto='został laureatem'; } fclose($plik); $pdf->output();?> Michał Dudkiewicz jaymz@mat.umk.pl
Format PDF PDF (Portable Document format) format plików służący do prezentacji, przenoszenia i drukowania treści tekstowo-graficznych, stworzony i promowany przez firmę Adobe Systems. Pierwsza specyfikacja formatu PDF-1.0 została opublikowana przez Adobe w 1993 roku. Aktualna wersja to PDF-1.7 opublikowana w 2006 roku. 29 stycznia 2007 firma Adobe udostępniła całkowicie dokumentację formatu PDF, w celu opublikowania PDF jako standardu ISO. 2
Format PDF budowa i zawartość pliku Nagłówek (header) Ciało dokumentu (body) Plik PDF Obiekty Tablica referencji (Cross Reference Table) Trailer Struktura pliku Struktura dokumentu Zawartośd pliku Należy pamiętad, że plik PDF ma dośd skomplikowaną budowę, m.in. ze względu na różne rodzaje danych zawartych w pliku (tekstowe i binarne np.: pliki graficzne). 3
Format PDF - budowa Pierwsza linia pliku PDF to nagłówek identyfikujący wersję specyfikacji PDF, z której korzysta dokument np.: %PDF-1.7 Ciało dokumentu zawiera sekwencje obiektów występujących w dokumencie. Tablica referencji (XREF) pozwala na swobodny dostęp do obiektów pliku położonych w ciele dokumentu (zawiera listę obiektów). Trailer zawiera informacje o rozmieszczeniu obiektów tablicy referencji (dlatego aplikacja czytająca PDF powinna odczytywad dokument od kooca). Zakooczenie %%EOF 4
Biblioteka FPDF FPDF darmowa biblioteka przeznaczona dla języka PHP, zawierająca funkcje umożliwiające wygenerowanie pliku PDF. Biblioteka umożliwia tworzenie własnych rozszerzeo, znacznie zwiększających możliwośd generowania dowolnych nawet bardzo złożonych dokumentów. http://www.fpdf.org Autorem biblioteki jest Olivier Plathey (olivier@fpdf.org) 5
Biblioteka FPDF FPDF jest biblioteką obiektową, dzięki temu korzystanie z niej jest bardzo łatwe i ogranicza się głównie do wywołania odpowiednich metod. Przykład (utworzenie obiektu FPDF, ustawienie rozmiaru i orientacji dokumentu, oraz wybór jednostek metrycznych używanych w dokumencie) $pdf = new FPDF('L','cm','A4'); $pdf->addpage(); FPDF umożliwia wygenerowanie pliku w formacie PDF bezpośrednio do przeglądarki Internetowej lub zapisanie do zewnętrznego pliku. 6
Biblioteka FPDF - schemat użycia Źródło danych Plik tekstowy Plik XLS, CSV, Serwer WWW + PHP + biblioteka FPDF Przeglądarka Internetowa Baza danych (Access, mysql, ) 7
Biblioteka FPDF i POLSKIE znaki diakrytyczne Biblioteka FPDF zawiera tylko kilka podstawowych czcionek jak: courier, times, helvetica, arial, symbol, sans serif z kodowaniem zachodnioeuropejskim (bez polskich ogonków ). Dodawanie nowej czcionki odbywa się w trzech etapach: 1. wygenerowanie pliku *.afm na podstawie czcionki TrueType (TTF) przy pomocy programu ttf2pt.exe ttf2pt1.exe -a czcionka.ttf czcionka W rezultacie zostanie utworzony plik czcionka.afm 8
Biblioteka FPDF i POLSKIE znaki diakrytyczne 2. wygenerowanie plików czcionka.php i czcionka.z za pomocą funkcji dostarczonej wraz z biblioteką FPDF MakeFont(czcionka_ttf,czcionka_afm,kodowanie); czcionka_ttf - nazwa oryginalnego pliku z czcionką w formacie TTF czcionka_afm - nazwa pliku z czcionką w formacie afm kodowanie - nazwa pliku z mapą znaków danej strony kodowej (cp1250.map - polskie znaki Windows, iso-8859-2 -polskie znaki ISO) 9
Biblioteka FPDF i POLSKIE znaki diakrytyczne 3. Użycie nowej czcionki AddFont(nazwa,styl,plik_czcionki); SetFont(nazwa,styl,rozmiar); nazwa - nasza nazwa czcionki styl - pogrubiona (B), pochylona (I), podkreślona (U) plik_czcionki - wygenerowany wcześniej plik czcionka.php rozmiar - rozmiar czcionki Przykład: $pdf->addfont( czcionka,, czcionka.php ); $pdf->setfont( czcionka,,34); 10
PHP i FPDF sposoby generowania pliku PDF Bezpośrednio do przeglądarki Internetowej: $pdf -> Output(); Zapis do zewnętrznego pliku: $pdf -> Output('plik.pdf'); 11
Tworzenie dokumentu PDF Tworzenie nowego dokumentu PDF new FPDF(orientacja, jednostki, format); orientacja: L - landscape (pozioma), P - portrait (pionowa) jednostki: pt - punkt 1/72 cala, mm, cm, in cale format: A3, A4, A5, Letter, Legal Przykład: $pdf = new FPDF('L', 'cm', 'A5'); Uwaga! jeśli nie podamy parametrów to domyślnie jest P, mm, A4 12
Marginesy w pliku PDF Ustawienia marginesów w dokumencie SetMargins(lewy, górny, prawy); SetLeftMargin(lewy); SetRightMargin(prawy); SetTopMargin(górny); Przykład: $pdf->setmargins(1,0.5); Uwaga! Domyślne wartości to 1 cm. Jeśli podamy tylko lewy i górny margines to prawy będzie miał taką samą wartośd jak lewy. Wartości wyrażone są w takich jednostkach jakie zdefiniowaliśmy przy tworzeniu dokumentu. 13
Marginesy w pliku PDF Automatyczny podział strony i dolny margines SetAutoPageBreak(auto,dolny_margines); auto: 0 - wyłączony automatyczny podział stron 1 - włączony automatyczny podział stron margines: rozmiar dolnego marginesu Przykład: $pdf->setautopagebreak(1,1.5); Uwaga! Wyłączenie automatycznego podziału strony spowoduje, że nie zostanie utworzona nowa strona, nawet jeśli zawartośd strony nie będzie się mieścid na tej stronie. Domyślnie ustawiony jest margines 2cm. 14
Elementy pliku PDF nowa strona, tekst Utworzenie nowej strony AddPage(); Umieszczenie tekstu w dowolnym miejscu strony Text(x,y,napis); x, y - pozycja na stronie, napis - dowolny napis Nowa linia Przykład: Ln(); $pdf->text(1,5, Text ); 15
Elementy pliku PDF - komórka Komórka Cell(s,w,napis,ramka,p,a,f,link); s - szerokośd, w - wysokośd, napis - zawartośd komórki ramka: 0 - nie, 1 tak, lub tylko krawędź (L,R,T,B); link - hiperłącze a - wyrównanie zawartości: L - lewo, C - wycentrowane, P - prawo f - wypełnienie komórki tłem: 0 - nie, 1 - tak p - pozycja w dokumencie po umieszczeniu komórki: 0 - na prawo, 1 - w nowej lini, 2 - bezpśrednio pod Przykład: $pdf->cell(0,1, Napis, LT ); Uwaga! Jeśli jako szerokośd podamy 0 to komórka rozciągnie się do prawego marginesu. 16
Elementy pliku PDF multikomórka Komórka (automatyczny podział zawartości lub po napotkaniu znaku *ENTER+) MultiCell(s,w,napis,ramka,a,f); s - szerokośd, w - wysokośd, napis - zawartośd komórki ramka: 0 - nie, 1 tak, lub L - tylko lewa krawędź, R - tylko prawa krawędź, T - tylko górna krawędź, B - tylko dolna krawędź a - wyrównanie zawartości: L - lewo, C - wycentrowane, P - prawo f - wypełnienie komórki tłem: 0 - nie, 1 - tak Przykład: $pdf->multicell(0,5, Dzień Dobry! ); 17
Elementy pliku PDF plik graficzny Umieszczanie pliku z obrazem w dokumencie Image(plik,x,y,s,w,typ,link); plik - nazwa pliku (akceptowane pliki *.jpg, *.png) x, y - położenie na stronie s, w - szerokośd, wysokośd (wartośd 0 - dostosuj automatycznie) typ - możliwe wartości: JPG, JPEG, PNG jeśli nie jest podany to typ jest identyfikowany na podstawie rozszerzenia pliku link hiperłącze Przykład: $pdf->image( plik.jpg,10,20,12,0,jpg); 18
Definiowanie kolorów Definiowanie kolorów tekstu, linii, wypełnienia SetTextColor(r,g,b); - kolor tekstu SetFilColor(r,g,b); - kolor wypełnienia SetDrawColor(r,g,b); - kolor krawędzi, linii r, g, b wartości kolorów czerwonego, zielonego, niebieskiego (0..255) Przykład: $pdf->settextcolor(0,255,0); 19
Ustalanie pozycji w dokumencie Przemieszczanie się w dokumencie: SetXY(x,y); SetX(x); SetY(y); x, y - wartości odpowiednio x: pozioma, y: pionowa Przykład: $pdf->setxy(2,5.23); Uwaga! Jeśli podamy ujemną wartośd przy SetY() to wówczas będzie ona liczona od dolnego brzegu strony w górę. Analogicznie dla SetX() wartośd będzie liczona od prawego brzegu w lewo. 20
Właściwości dokumentu Właściwości dokumentu SetAuthor(autor); SetTitle(tytul); SetSubject(tematyka); SetKeywords(slowa); SetCreator(program); SetDisplayMode(zoom,strony); SetCompression(bool); zoom - fullpage, fullwidth, liczba np. 0.5 (50%) strony - ilośd stron: single, continous, two Uwaga! Kompresja jest domyślnie włączona, daje zysk około 50%. 21
Hiperłącze Hiperłącze Link(x,y,link); x, y - pozycja na stronie link hiperłącze Przykład: $pdf->link(1,5, www.wp.pl ); Uwaga! Hiperłącze nie jest widoczne. Można je wykorzystad do umieszczenia na dowolnym obiekcie np.: obrazie. 22
Odnośnik wewnątrz dokumentu Łącze wewnątrz dokumentu AddLink(); SetLink(link,y,strona); Funkcja AddLink() - tworzy wewnętrzne łącze i zwraca jego identyfikator Funkcja SetLink() - definiuje stronę (strona), pozycję na stronie (y) na którą wskazuje łącze (link) $link=$pdf->addlink();... $pdf->setlink($link); $pdf->cell(0,1,'dziś jest ładna pogoda'); 23
Rozszerzanie możliwości biblioteki FPDF Biblioteka FPDF pozwala wygenerowad w pełni funkcjonalny dokument PDF, jednak największe możliwości uzyskamy tworząc własne rozszerzenia. include( fpdf.php ) nasz_fpdf.php include( nasz_fpdf.php ) generuj.php fpdf.php 24
PDF ogólne parametry linii d - styl linii Przykład [2 1] 0 d [3] 0 d [] 0 d J rodzaj zakooczenia (0,1,2) Przykład 0 J 1 J 2 J 25
PDF ogólne parametry linii w grubośd linii, np.: 5 w j sposób połączenia linii (0,1,2) Przykład 0 j 1 j 2 j 26
PDF konstrukcja ścieżek m rozpoczyna ścieżkę w punkcie x,y l linia od aktualnej pozycji do punktu x,y h zamyka ścieżkę Przykład 30 20 m 200 100 l 30,20 200,100 27
PDF konstrukcja ścieżek x y w h re prostokąt o lewym górnym wierzchołku x,y oraz szerokości w i wysokości h Przykład 30,20 30 20 200 100 re Uwaga! Prostokąt można również narysowad przy pomocy linii 30 +200,20+100 30 20 m 230 20 l 230 120 l 30 120 l h 28
PDF konstrukcja ścieżek x 1 y 1 x 2 y 2 x 3 y 3 c krzywa Beziera generowana przez wielomian R(t) = (1-t) 3 P 0 + 3t(1-t) 2 P 1 + 3t 2 (1-t)P 2 + t 3 P 3 t zmienia się od 0.0 do 1.0, R(0)=P 0, R(1)=P 3 P 1 (x 1,y 1 ) P 2 (x 2,y 2 ) P 3 (x 3,y 3 ) P 0 29
PDF konstrukcja ścieżek x 2 y 2 x 3 y 3 v krzywa Beziera z jednym punktem kontrolnym (P 2 ) P 2 (x 2,y 2 ) P 0 P 3 (x 3,y 3 ) 30
PDF konstrukcja ścieżek x 1 y 1 x 3 y 3 y krzywa Beziera z jednym punktem kontrolnym (P 1 ) P 1 (x 1,y 1 ) P 0 P 3 (x 3,y 3 ) 31
PDF rysowanie ścieżek S rysowanie ścieżki linią (wygląd linii zależy od wcześniej ustalonych parametrów: rozmiaru, koloru, stylu) s to samo co h S (zamknięcie ścieżki i narysowanie jej za pomocą linii) f,f*,b,b*,b,b* wypełnienie ścieżki kolorem Kolor linii r g b RG ustawia kolor linii (model rgb) c m y b K ustawia kolor linii (model cmyk) gray G odcienie szarości (od 0.0 czarny do 1.0 biały) Kolor wypełnienia (analogicznie jak dla linii, polecenia pisane małą literą) r g b rg, c m y b k, gray g 32
PDF przekształcenia geometryczne Przekształcenia definiowane są za pomocą ciągu poleceo: q a b c d e f cm Q gdzie a b c d e f definiuje macierz przekształcenia: translacja 1 0 0 1 tx ty obrót cosα sinα sinα cosα 0 0 pochylenie 1 tgα tgβ 1 0 0 skalowanie sx 0 0 sy 0 0 33
PDF przekształcenia geometryczne Przykład Translacja punktu A=(1,2) o wektor t=<-1,2> 1 0 A' A 0 1 txty 1 0 A' [121] 0 1 [ 0 4 ] 12 34
Polecenia PDF w bibliotece FPDF (przykład) Polecenia PDF przekazujemy do biblioteki FPDF za pomocą funkcji sprintf $this->out(sprintf( POLECENIA PDF )); Przykład Funkcja rysująca krzywą Beziera w kolorze czerwonym linią przerywaną function krzywa(){ $this->_out(sprintf(' [5 5] 0 d 1 0 0 RG 20 400 m 20 350 70 300 120 300 c S')); } 35
FPDF - zakończenie http://www.fpdf.org 36