|
|
 |
X. Funzioni ClibPDF
ClibPDF permette di creare documenti PDF utilizzando PHP. E' disponibile per
il download a FastIO, ma
richiede che si acquisti una licenza per l'utilizzo commerciale. La funzionalità
e l' API di ClibPDF sono simili a quelle di PDFlib.
Questa documentazione dovrebbe essere letta accanto al manuale di ClibPDF dato che
quest'ultimo spiega la libreria più nel dettaglio.
Molte funzioni nella ClibPDF nativa e nel modulo PHP , così come
nella PDFlib hanno lo stesso nome.
Tutte le funzioni ad eccezione di cpdf_open() hanno
l'identificatore del documento come loro primo parametro.
Attualmente questo identificatore non è usato internamente dato che ClibPDF
non supporta la creazione di svariati documenti PDF contemporaneamente.
Attualmente non bisognerebbe provare a farlo, dato che i risultati sono imprevedibili.
Non è possibile controllare quali siano le conseguenze in un ambiente multi
processo. Secondo l'autore di ClibPDF questo cambierà in una delle
prossime release (la versione corrente quando questo è stato scritto è la 1.10).
Se si ha bisogno di questa funzionalità utilizzare il modulo pdflib.
Nota:
La funzione cpdf_set_font() è cambiata dal PHP 3
per supportare i font asiatici. Il parametro per l'encoding non è più un numero intero,
ma una stringa.
Un'interessante caratteristica di ClibPDF (e PDFlib) è l'abilità di creare il
documento PDF completamente in memoria senza utilizzare file temporanei.
Inoltre fornisce l'abilità di passare le coordinare in un'unità
di lunghezza predefinita. (Questa caratteristica puo'essere simulata da
pdf_translate() quando si utilizzano le funzioni PDFlib.)
Un'altra interessante caratteristica di ClibPDF è il fatto che ogni pagina può essere
modificata in qualsiasi momento anche se è già stata aperta una nuova pagina. La funzione
cpdf_set_current_page() permette di lasciare la pagina
corrente e modificare un'altra pagina.
La maggioranza delle funzioni sono abbastanza facili da usare. La parte più difficile
è probabilmente creare un simplice documento PDF. L'esempio
seguente dovrebbe essere utile per cominciare. Crea un documento
con una pagina. La pagina contiene il testo "Times-Roman" con un
font di 30pt. Il testo è sottolineato.
Esempio 1. Semplice esempio ClibPDF <?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842, 1.0);
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 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);
?> |
|
La distribuzione pdflib contiene un esempio più complicato che crea una
serie di pagine con un orologio analogico. Di seguito si trova questo esempio convertito
in PHP utilizzando l'estensione ClibPDF:
Esempio 2. esempio pdfclock dalla distribuzione pdflib 2.0 <?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);
/* linee dei minuti */
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);
/* linee dei 5 minuti */
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();
/* disegna la lancetta delle ore */
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);
/* disegna la lancetta dei minuti */
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);
/* disegna la lancetta dei secondi */
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);
/* disegna un piccolo cerchio al centro */
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);
?> |
|
add a note
User Contributed Notes
Funzioni ClibPDF
puterasalji at yahoo dot com
07-Apr-2003 02: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);
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
| |