X. 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 fájlmé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 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 PHP 3 óta, hogy támogassa az ázsiai betűkészleteket. 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 fájlok 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 az elindulásban. Ez egy egy oldalas 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

<?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842);
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
cpdf_set_text_rendering($cpdf, 1);
cpdf_text($cpdf, "Times Roman outlined", 50, 750);
cpdf_moveto($cpdf, 50, 740);
cpdf_lineto($cpdf, 330, 740);
cpdf_stroke($cpdf);
cpdf_finalize($cpdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($cpdf);
cpdf_close($cpdf);
?>

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

<?php
$radius = 200;
$margin = 20;
$pagecount = 40;

$pdf = cpdf_open(0);
cpdf_set_creator($pdf, "pdf_clock.php3");
cpdf_set_title($pdf, "Analog Clock");
  
while($pagecount-- > 0) {
  cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0);
  
  cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0);  /* wipe */
  
  cpdf_translate($pdf, $radius + $margin, $radius + $margin);
  cpdf_save($pdf);
  cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);
  
  /* minute strokes */
  cpdf_setlinewidth($pdf, 2.0);
  for ($alpha = 0; $alpha < 360; $alpha += 6)
    {
    cpdf_rotate($pdf, 6.0);
    cpdf_moveto($pdf, $radius, 0.0);
    cpdf_lineto($pdf, $radius-$margin/3, 0.0);
    cpdf_stroke($pdf);
    }
  
  cpdf_restore($pdf);
  cpdf_save($pdf);
 
  /* 5 minute strokes */
  cpdf_setlinewidth($pdf, 3.0);
  for ($alpha = 0; $alpha < 360; $alpha += 30)
  {
    cpdf_rotate($pdf, 30.0);
    cpdf_moveto($pdf, $radius, 0.0);
    cpdf_lineto($pdf, $radius-$margin, 0.0);
    cpdf_stroke($pdf);
  }

  $ltime = getdate();

  /* draw hour hand */
  cpdf_save($pdf);
  cpdf_rotate($pdf, -(($ltime['minutes']/60.0) + $ltime['hours'] - 3.0) * 30.0);
  cpdf_moveto($pdf, -$radius/10, -$radius/20);
  cpdf_lineto($pdf, $radius/2, 0.0);
  cpdf_lineto($pdf, -$radius/10, $radius/20);
  cpdf_closepath($pdf);
  cpdf_fill($pdf);
  cpdf_restore($pdf);

  /* draw minute hand */
  cpdf_save($pdf);
  cpdf_rotate($pdf, -(($ltime['seconds']/60.0) + $ltime['minutes'] - 15.0) * 6.0);
  cpdf_moveto($pdf, -$radius/10, -$radius/20);
  cpdf_lineto($pdf, $radius * 0.8, 0.0);
  cpdf_lineto($pdf, -$radius/10, $radius/20);
  cpdf_closepath($pdf);
  cpdf_fill($pdf);
  cpdf_restore($pdf);

  /* draw second hand */
  cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
  cpdf_setlinewidth($pdf, 2);
  cpdf_save($pdf);
  cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
  cpdf_moveto($pdf, -$radius/5, 0.0);
  cpdf_lineto($pdf, $radius, 0.0);
  cpdf_stroke($pdf);
  cpdf_restore($pdf);

  /* draw little circle at center */
  cpdf_circle($pdf, 0, 0, $radius/30);
  cpdf_fill($pdf);

  cpdf_restore($pdf);

  cpdf_finalize_page($pdf, $pagecount+1);
}

cpdf_finalize($pdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($pdf);
cpdf_close($pdf);
?>
Tartalom
cpdf_add_annotation -- Megjegyzés hozzáfűzése
cpdf_add_outline -- Könyvjelzőt helyez el az aktuális oldalon
cpdf_arc -- Ívet rajzol
cpdf_begin_text -- Szöveg szekciót kezd el
cpdf_circle -- Kört rajzol
cpdf_clip -- Kivágja az aktuális alakzatot
cpdf_close -- Bezárja a pdf dokumentumot
cpdf_closepath_fill_stroke -- Bezárja, kitölti és körvonalazza az aktuális alakzatot
cpdf_closepath_stroke -- Bezárja az alakzatot és körvonalat rajzol az alakzat mentén
cpdf_closepath -- Befejez egy alakzatot
cpdf_continue_text -- Szöveget helyez a következő sorba
cpdf_curveto -- Görbét rajzol
cpdf_end_text -- Befejezi a szöveg szekciót
cpdf_fill_stroke -- Kitölti és körvonalazza az aktuális alakzatot
cpdf_fill -- Kitölti az aktuális alakzatot
cpdf_finalize_page -- Befejezi az oldalt
cpdf_finalize -- Befejezi a dokumentumot
cpdf_global_set_document_limits -- A pdf dokumentumra vonatkozó korlátozások beállítására szolgál
cpdf_import_jpeg -- Megnyit egy JPEG képet
cpdf_lineto -- Egyenest rajzol
cpdf_moveto -- Beállítja az aktuális pontot
cpdf_newpath --  Új alakzatot kezd
cpdf_open -- Megnyit egy új pdf dokumentumot
cpdf_output_buffer -- A memóriapufferből kiiratja a pdf dokumentumot
cpdf_page_init -- Új oldalt kezd
cpdf_place_inline_image -- Képet helyez el az oldalon
cpdf_rect -- Téglalapot rajzol
cpdf_restore -- Visszaállítja a korábban elmentett környezetet
cpdf_rlineto -- Egyenest rajzol
cpdf_rmoveto -- Beállítja az aktuális pontot
cpdf_rotate_text --  Sets text rotation angle
cpdf_rotate -- Beállítja a forgatást
cpdf_save_to_file -- A pdf dokumentumot fájlba írja
cpdf_save -- Elmenti az aktuális környezetet
cpdf_scale -- Beállítja a méretezést
cpdf_set_action_url --  Sets hyperlink
cpdf_set_char_spacing -- Beállítja a betűtávolságot
cpdf_set_creator -- A pdf dokumentumban a létrehozó(creator) mezőt állítja
cpdf_set_current_page -- Beállítja az aktuális oldalt
cpdf_set_font_directories --  Sets directories to search when using external fonts
cpdf_set_font_map_file --  Sets fontname to filename translation map when using external fonts
cpdf_set_font -- Kiválaszja az aktuális betűtípust és méretet
cpdf_set_horiz_scaling -- Beállítja a szöveg vízszintes méretezését
cpdf_set_keywords -- Beállítja a pdf dokumentum kulcsszavak mezőjét
cpdf_set_leading -- Beállítja a szöveg sortávolságát
cpdf_set_page_animation -- Beállítja az oldalak közti átmeneti időtartamot
cpdf_set_subject -- Beállítja a pdf dokumentum tárgy mezőjé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_text_rendering -- Meghatározza hogyan legyen a szöveg kirajzolva
cpdf_set_text_rise -- Beállítja a szöveg emelkedését
cpdf_set_title -- A pdf dokumentumban a cím(title) mezőt állítja
cpdf_set_viewer_preferences --  How to show the document in the viewer
cpdf_set_word_spacing -- Beállítja a szótávolságot
cpdf_setdash -- Beállítja a szaggatott vonalmintát
cpdf_setflat -- Beállítja a simaságot
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_setlinecap -- Beállítja a vonalcsúcs paramétert
cpdf_setlinejoin -- Beállítja a vonalak kapcsolódási módját
cpdf_setlinewidth -- Beállítja a vonalvastagságot
cpdf_setmiterlimit -- Beállítja a hegyesszög határát
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_show_xy -- Szöveget helyez adott pozícióba
cpdf_show -- Szöveget helyez az aktuális pozícióba
cpdf_stringwidth -- Visszaadja a szöveg szélességét az aktuális font alapján
cpdf_stroke -- Körvonalat rajzol egy alakzat mentén
cpdf_text -- Szöveget helyez el paraméterekkel
cpdf_translate -- Beállítja a koordinátarendszer kezdőpontját