IV. ClibPDF függvények

A ClibPDF segítségével PDF dokumentumokat lehet létrehozni PHP-vel. Ez elérhető a FastIO-nál, de nem szabad használatú (free) szoftver. Mielött dolgozni kezdesz a ClibPDF-fel tanácsos elolvasnod a licence-t. Ha nem fogadod el, használhatod Thomas Merz pdflib-jét, amelyik szintén kiválóan alkalmazható. A ClibPDF és az API hasonló Thomas Merz pdflib-jéhez de a FastIO-nak köszönhetően a ClibPDF gyorsabb, és ráadásul kisebb dokumentumokat állít elő. Ez valószinűleg változni fog a pdflib 2.0 verziójában. Egy egyszerű benchmark (a pdflib 2.0-ből php-ba fordított a pdfclock.c példa) nem mutat különbséget a sebességben. A fileméret is hasonló, ha kikapcsoljuk a tömörítést. Tehát próbáld ki mindkettőt és nézd meg melyik jobb neked.

Ezt a dokumentációt ajánlatos a ClibPDF kézikönyvvel együtt olvasni mivel az a függvényeket nagyobb részletességgel magyarázza.

Sok függvény az alap ClibPDF-ben, a PHP modulban, valamint a pdflib-ben a ugyanazzal a névvel rendelkezik. Az összes függvény, kivéve a cpdf_open() első paramétereként a dokumentum kezelőjét (handler) kéri. Jelenleg ez a kezelőt a PHP belsőleg nem használja, mivel a ClibPDF nem támogatja több PDF dokumentum egyidejű létrehjozását. Ezt most ne is próbáld ki, mert az eredményt nem lehet előre megjósolni. Nem tudhatom, hogy a többszálas környezetben ez milyen következnényekkel járna. A ClibPDF szerzője szerint ez változni fog a következő változatnál (az írás idején a jelenlegi verzió az 1.10). Ha azonban mégis szükséged van erre a lehetőségre, használd a pdflib modult.

Megjegyzés: A cpdf_set_font() függvény megváltozott a PHP3 óta, hogy támogassa az ázsiai fontokat. Az encoding paraméter már nem egy integer, hanem egy string!

A pdflib-el szemben van egy nagy előnye a ClibPDF-nek. PDF doumentumokat tud létrehozni a memóriában ideiglenes file-ok használata nélkül. Lehetőséget ad továbbá arra, hogy koordinátákat adj át egy előre definiált mértékegységben. Ez egy nagyon jó lehetőség de szimulálható a pdf_translate()-el.

A legtöbb függvény egyszerűen használható. A legnehezebb rész valószínűleg egy nagyon egyszerű PDF létrehozása. A következő példa segíthet elindulni. Ez egy egyoldalas dokumentumot készít. Az oldal tartalmazza a "Times-Roman" szöveget egy 30 pont méretű körvonalas betűtípusssal. A szöveg aláhúzott.

Példa 1. Egyszerű ClibPDF példa

  1 
  2 
  3 <?php
  4 $cpdf = cpdf_open(0);
  5 cpdf_page_init($cpdf, 1, 0, 595, 842);
  6 cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
  7 cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
  8 cpdf_set_text_rendering($cpdf, 1);
  9 cpdf_text($cpdf, "Times Roman outlined", 50, 750);
 10 cpdf_moveto($cpdf, 50, 740);
 11 cpdf_lineto($cpdf, 330, 740);
 12 cpdf_stroke($cpdf);
 13 cpdf_finalize($cpdf);
 14 Header("Content-type: application/pdf");
 15 cpdf_output_buffer($cpdf);
 16 cpdf_close($cpdf);
 17 ?>
 18 
 19     

A pdflib csomag egy összetettebb példát tartalmaz, amely egy oldalsorozatot állít elő egy analóg órával Ez itt a ClibPDF kiterjesztést használó PHP-be konvertált változat:

Példa 2. pdfclock példa a pdflib 2.0 csomagból

  1 
  2 
  3 <?php
  4 $radius = 200;
  5 $margin = 20;
  6 $pagecount = 40;
  7 
  8 $pdf = cpdf_open(0);
  9 cpdf_set_creator($pdf, "pdf_clock.php3");
 10 cpdf_set_title($pdf, "Analog Clock");
 11   
 12 while($pagecount-- > 0) {
 13   cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0);
 14   
 15   cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0);  /* wipe */
 16   
 17   cpdf_translate($pdf, $radius + $margin, $radius + $margin);
 18   cpdf_save($pdf);
 19   cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);
 20   
 21   /* minute strokes */
 22   cpdf_setlinewidth($pdf, 2.0);
 23   for ($alpha = 0; $alpha < 360; $alpha += 6)
 24     {
 25     cpdf_rotate($pdf, 6.0);
 26     cpdf_moveto($pdf, $radius, 0.0);
 27     cpdf_lineto($pdf, $radius-$margin/3, 0.0);
 28     cpdf_stroke($pdf);
 29     }
 30   
 31   cpdf_restore($pdf);
 32   cpdf_save($pdf);
 33  
 34   /* 5 minute strokes */
 35   cpdf_setlinewidth($pdf, 3.0);
 36   for ($alpha = 0; $alpha < 360; $alpha += 30)
 37   {
 38     cpdf_rotate($pdf, 30.0);
 39     cpdf_moveto($pdf, $radius, 0.0);
 40     cpdf_lineto($pdf, $radius-$margin, 0.0);
 41     cpdf_stroke($pdf);
 42   }
 43 
 44   $ltime = getdate();
 45 
 46   /* draw hour hand */
 47   cpdf_save($pdf);
 48   cpdf_rotate($pdf, -(($ltime['minutes']/60.0) + $ltime['hours'] - 3.0) * 30.0);
 49   cpdf_moveto($pdf, -$radius/10, -$radius/20);
 50   cpdf_lineto($pdf, $radius/2, 0.0);
 51   cpdf_lineto($pdf, -$radius/10, $radius/20);
 52   cpdf_closepath($pdf);
 53   cpdf_fill($pdf);
 54   cpdf_restore($pdf);
 55 
 56   /* draw minute hand */
 57   cpdf_save($pdf);
 58   cpdf_rotate($pdf, -(($ltime['seconds']/60.0) + $ltime['minutes'] - 15.0) * 6.0);
 59   cpdf_moveto($pdf, -$radius/10, -$radius/20);
 60   cpdf_lineto($pdf, $radius * 0.8, 0.0);
 61   cpdf_lineto($pdf, -$radius/10, $radius/20);
 62   cpdf_closepath($pdf);
 63   cpdf_fill($pdf);
 64   cpdf_restore($pdf);
 65 
 66   /* draw second hand */
 67   cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
 68   cpdf_setlinewidth($pdf, 2);
 69   cpdf_save($pdf);
 70   cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
 71   cpdf_moveto($pdf, -$radius/5, 0.0);
 72   cpdf_lineto($pdf, $radius, 0.0);
 73   cpdf_stroke($pdf);
 74   cpdf_restore($pdf);
 75 
 76   /* draw little circle at center */
 77   cpdf_circle($pdf, 0, 0, $radius/30);
 78   cpdf_fill($pdf);
 79 
 80   cpdf_restore($pdf);
 81 
 82   cpdf_finalize_page($pdf, $pagecount+1);
 83 }
 84 
 85 cpdf_finalize($pdf);
 86 Header("Content-type: application/pdf");
 87 cpdf_output_buffer($pdf);
 88 cpdf_close($pdf);
 89 ?>
 90 
 91     
Tartalom
cpdf_global_set_document_limits — Sets document limits for any pdf document
cpdf_set_creator — Sets the creator field in the pdf document
cpdf_set_title — Sets the title field of the pdf document
cpdf_set_subject — Beállítja a pdf dokumentum tárgy mezőjét
cpdf_set_keywords — Beállítja a pdf dokumentum kulcsszavak mezőjét
cpdf_open — Megnyit egy új pdf dokumentumot
cpdf_close — Bezárja a pdf dokumentumot
cpdf_page_init — Új oldalt kezd
cpdf_finalize_page — Befejezi az oldalt
cpdf_finalize — Befejezi a dokumentumot
cpdf_output_buffer — A memóriapufferből kiiratja a pdf dokumentumot
cpdf_save_to_file — A pdf dokumentumot file-ba írja
cpdf_set_current_page — Beállítja az aktuális oldalt
cpdf_begin_text — Szöveg szekciót kezd el
cpdf_end_text — Befejezi a szöveg szekciót
cpdf_show — Szöveget helyez az aktuális pozícióba
cpdf_show_xy — Szöveget helyez adott pozícióba
cpdf_text — Szöveget helyez el paraméterekkel
cpdf_set_font — Kiválaszja az aktuális betűtípust és méretet
cpdf_set_leading — Beállítja a szöveg sortávolságát
cpdf_set_text_rendering — Meghatározza hogyan legyen a szöveg kirajzolva
cpdf_set_horiz_scaling — Beállítja a szöveg vízszintes méretezését
cpdf_set_text_rise — Beállítja a szöveg emelkedését
cpdf_set_text_matrix — Beállítja a szövegmátrixot
cpdf_set_text_pos — Beállítja a szövegpozíciót
cpdf_set_char_spacing — Beállítja a betűtávolságot
cpdf_set_word_spacing — Beállítja a szótávolságot
cpdf_continue_text — Szöveget helyez a következő sorba
cpdf_stringwidth — Visszaadja a szöveg szélességét az aktuális font alapján
cpdf_save — Elmenti az aktuális környezetet
cpdf_restore — Visszaállítja a korábban elmentett környezetet
cpdf_translate — Beállítja a koordinátarendszer kezdőpontját
cpdf_scale — Beállítja a méretezést
cpdf_rotate — Beállítja a forgatást
cpdf_setflat — Beállítja a simaságot
cpdf_setlinejoin — Beállítja a vonalak kapcsolódási módját
cpdf_setlinecap — Beállítja a vonalcsúcs paramétert
cpdf_setmiterlimit — Beállítja a hegyesszög határát
cpdf_setlinewidth — Beállítja a vonalvastagságot
cpdf_setdash — Beállítja a szaggatott vonalmintát
cpdf_newpath — Új alakzatot kezd
cpdf_moveto — Beállítja az aktuális pontot
cpdf_rmoveto — Beállítja az aktuális pontot
cpdf_curveto — Görbét rajzol
cpdf_lineto — Egyenest rajzol
cpdf_rlineto — Egyenest rajzol
cpdf_circle — Kört rajzol
cpdf_arc — Ívet rajzol
cpdf_rect — Téglalapot rajzol
cpdf_closepath — Befejez egy alakzatot
cpdf_stroke — Körvonalat rajzol egy alakzat mentén
cpdf_closepath_stroke — Bezárja az alakzatot és körvonalat rajzol az alakzat mentén
cpdf_fill — Kitölti az aktuális alakzatot
cpdf_fill_stroke — Kitölti és körvonalazza az aktuális alakzatot
cpdf_closepath_fill_stroke — Bezárja, kitölti és körvonalazza az aktuális alakzatot
cpdf_clip — Kivágja az aktuális alakzatot
cpdf_setgray_fill — Szürke értékre állítja a kitöltő színt
cpdf_setgray_stroke — Szürke értékre állítja a körvonalrajzoló színt
cpdf_setgray — Szürke értékre állítja a rajzoló és kitöltő színt
cpdf_setrgbcolor_fill — Rgb színértékre állítja be a kitöltő színt
cpdf_setrgbcolor_stroke — Rgb színértékre állítja be a körvonalrajzoló színt
cpdf_setrgbcolor — Rgb színértékre állítja be a körvonalrajzoló és kitöltő színt
cpdf_add_outline — Könyvjelzőt helyez el az aktuális oldalon
cpdf_set_page_animation — Beállítja az oldalak közti átmeneti időtartamot
cpdf_import_jpeg — Megnyit egy JPEG képet
cpdf_place_inline_image — Képet helyez el az oldalon
cpdf_add_annotation — Megjegyzés hozzáfűzése