|
|
X. ClibPDF FunktionenEinf�hrung
Mit der ClibPDF k�nnen Sie PDF-Dokumente mit PHP erstellen.
Funktionalit�t und API der ClibPDF sind der PDFlib �hnlich. Diese Dokumentation
sollten Sie zusammen mit dem ClibPDF-Handbuch lesen, weil
letzteres diese Bibliothek viel ausf�hrlicher erkl�rt.
Die Namen vieler Funktionen in der ClibPDF, im PHP-Modul und in
der PDFlib sind gleich. Au�er
cpdf_open() nehmen alle Funktionen die
Bezeichnung des Dokuments als ihren ersten Parameter.
Diese Bezeichnung wird gegenw�rtig nicht intern verwendet, weil
ClibPDF die gleichzeitige Erzeugung mehrerer PDF-Dokumente nicht
unterst�tzt. Da das Ergebnis nicht vorhersehbar ist, sollten Sie
es am besten nicht einmal testen. Die Folgen, die das in einer
multi-threaded Umgebung h�tte, kann ich nicht absch�tzen. Laut
ClibPDF-Autor wird sich das in einer der n�chsten Versionen
�ndern (als dieses geschrieben wurde, war Version 1.10 aktuell).
Verwenden Sie das pdflib-Modul, wenn Sie diese Funktionalit�t
ben�tigen.
Eine nette Eigenschaft der ClibPDF (und der PDFlib) ist die M�glichkeit, das
PDF-Dokument vollst�ndig im Speicher zu erzeugen, ohne tempor�re
Dateien zu verwenden. Sie bietet auch die M�glichkeit,
Koordinaten in einer vordefinierten L�ngeneinheit zu �bergeben.
Dies ist eine praktische F�higkeit, die bei Verwendung der PDFlib aber auch mit
pdf_translate() simuliert werden kann.
Eine weitere nette Eigenschaft von ClibPDF ist die Tatsache, dass
jede Seite jederzeit ge�ndert werden kann, selbst wenn schon eine
neue Seite ge�ffnet wurde. Die Funktion
cpdf_set_current_page() erlaubt es, die
aktuelle Seite zu verlassen und mit den �nderungen einer anderen
Seite fortzufahren.
Die meisten Funktionen sind ziemlich einfach zu benutzen. Der
schwierigste Teil ist wahrscheinlich die Erzeugung eines sehr
einfachen PDF-Dokuments �berhaupt. Das folgende Beispiel sollte
f�r Sie eine gute Starthilfe sein. Es erzeugt ein Dokument mit
einer Seite. Die Seite enth�lt den Umriss des Textes
"Times-Roman" in 30-Punkt-Schrift. Der Text ist unterstrichen.
Anforderungen
Um die ClibPDF-Funktionen benutzen zu k�nnen, m�ssen Sie das
ClibPDF-Paket installieren. Es ist zum Herunterladen erh�ltlich
von , aber f�r deren
kommerzielle Verwendung ist es erforderlich, dass Sie eine Lizenz
erwerben. F�r PHP wird cpdflib >= 2 ben�tigt.
Installation
Damit diese Funktionen zur Verf�gung stehen, m�ssen Sie PHP mit
--with-cpdflib[=DIR] �bersetzen.
DIR ist das cpdflib-Installationsverzeichnis, standardm��ig
/usr. Zus�tzlich k�nnen Sie die jpeg- und
tiff-Bibliotheken f�r die Verwendung durch ClibPDF angeben. Das
erreichen Sie, indem Sie an ihre Konfigurationszeile die Optionen
--with-jpeg-dir[=DIR]
--with-tiff-dir[=DIR] anf�gen.
Laufzeit KonfigurationDiese Erweiterung definiert keine Konfigurationseinstellungen in der php.ini. Vordefinierte Konstanten
Folgende Konstanten werden von dieser Erweiterung definiert und
stehen nur zur Verf�gung, wenn die Erweiterung entweder statisch
in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.
BeispieleBeispiel 1. Ein einfaches ClibPDF-Beispiel <?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842, 1.0);
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Seite 1");
cpdf_begin_text($cpdf);
cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
cpdf_set_text_rendering($cpdf, 1);
cpdf_text($cpdf, "Times Roman outlined", 50, 750);
cpdf_end_text($cpdf);
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);
?> |
|
Die pdflib-Distribution enth�lt ein komplexeres Beispiel, das
eine Reihe von Seiten mit einer Analoguhr erzeugt. Hier ist
dieses Beispiel, das unter Verwendung der ClibPDF-Erweiterung in
PHP konvertiert wurde:
Beispiel 2. pdfclock-Beispiel der pdflib 2.0 Distribution <?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);
?> |
|
Siehe auch
Siehe auch die Dokumentation der PDFlib-Erweiterung.
User Contributed Notes ClibPDF Funktionen |
|
daniel[at]lorch.cc
22-Feb-2002 12:50 |
|
If you don't want to pay for the library or your hoster does not have it
installed, have a look at "PHP pdf Class":
|
|
egrebNOSPAM at trivini dot com
04-Sep-2002 09:13 |
|
As of version 2.02-r1-1, ClibPDF claims to be multi-threaded-safe.
|
|
12-Mar-2003 02:33 |
|
You could also use FPDF. Find it at this address:
|
|
sinaler at superonline dot com
26-Mar-2003 06:33 |
|
In your manual, the cpdf functions are missing or non-updated.
for
example cpdf_textbox()....
|
|
puterasalji at yahoo dot com
07-Apr-2003 03:32 |
|
I've finally found a way to display text
<?php $radius =
200; $margin = 20; $pagecount = 1;
$pdf =
cpdf_open(0);
cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius
+ $margin), 2 * ($radius + $margin), 1.0);
cpdf_translate($pdf,
$radius + $margin, $radius + $margin);
cpdf_begin_text($pdf);
cpdf_set_font($pdf, "Arial", 30, "NULL");
cpdf_set_text_rendering($pdf, 1); cpdf_text($pdf,
"Yahoo!!", -198, 50); cpdf_end_text($pdf);
/*
minute strokes*/ for ($alpha = 0; $alpha < 90; $alpha += 6)
{ cpdf_setrgbcolor($pdf,9.0,9.0,0.0); cpdf_rotate($pdf,
6.0); cpdf_moveto($pdf, $radius, 0.0); cpdf_lineto($pdf,
$radius-$margin/3, 0.0); cpdf_stroke($pdf);
}
cpdf_finalize($pdf); Header("Content-type:
application/pdf"); cpdf_output_buffer($pdf); cpdf_close($pdf); ?>
I'm
not sure why, but the text appeared only after I've pasted the minute
strokes draw function from clock.php example. I user the cpdf_translate to
begin the x,y coordinate in the middle of the document
|
|
|
| |