1. Esattamente qual'è la licenza di FPDF? Ci sono limitazioni all'utilizzo?
FPDF è rilasciata con licenza permissiva: non vi sono restrizioni di utilizzo. Puoi incorporarla liberamente nelle tue applicazioni (commerciali o meno), con o senza modifiche.2. Quando tento di creare un PDF, molti strani caratteri vengono visualizzati sullo schermo. Perché?
Questi "strani" caratteri sono appunto il contenuto del tuo PDF. Questo comportamento è un difetto di IE6. Quando esso riceve una pagina HTML, e successivamente un file PDF dallo stesso indirizzo, visualizza quest'ultimo direttamente, senza lanciare Acrobat. Questo accade frequentemente durante lo sviluppo: all'ultimo errore dello script viene inviata una pagina HTML e, dopo la correzione, arriva il PDF.3. Quando provo a generare un PDF IE visualizza una pagina vuota. Che succede?
Anzitutto verifica di non aver inviato nulla al browser dopo il PDF (nemmeno uno spazio o un ritorno a capo). Puoi inserire la funzione exit() subito dopo la chiamata alla funzione Output() per essere sicuro. Se ancora non funziona, significa che sei una vittima della "sindrome della pagina vuota". IE utilizzata assieme al plug-in di Acrobat soffre di numerosi bugs. Per evitare questi problemi esistono due tecniche://Determina il nome del file temporaneo nella directory corrente
$file = basename(tempnam('.', 'tmp'));
rename($file, $file.'.pdf');
$file .= '.pdf';
//Salva il PDF come file
$pdf->Output($file, 'F');
//Reindirizzamento
header('Location: '.$file);
function CleanFiles($dir)
{
//Cancella i files temporanei
$t = time();
$h = opendir($dir);
while($file = readdir($h))
{
if(substr($file,0,3)=='tmp' && substr($file,-4)=='.pdf')
{
$path = $dir.'/'.$file;
if($t-filemtime($path)>3600)
@unlink($path);
}
}
closedir($h);
}
4. Non riesco a far funzionare le interruzioni di linea. Inserisco i \n nella stringa stampata da MultiCell ma non funziona.
Devi chiudere la stringa tra virgolette, non tra apici singoli.5. Provo a visualizzare una variabile nel metodo Header, ma non viene stampato nulla.
Devi utilizzare la parola chiaveglobal
per accedere alle variabili globali, per esempio:
function Header()
{
global $title;
$this->SetFont('Arial', 'B', 15);
$this->Cell(0, 10, $title, 1, 1, 'C');
}
function Header()
{
$this->SetFont('Arial', 'B', 15);
$this->Cell(0, 10, $this->title, 1, 1, 'C');
}
$pdf->title = 'My title';
6. Ho definito i metodi Header e Footer nella mia classe PDF ma non appare nulla.
Devi creare un oggetto dalla classe PDF, non FPDF:$pdf = new PDF();
7. I caratteri accentati vengono sostituiti da strani caratteri come é.
Non utilizzare la codifica UTF-8. I font standard FPDF utilizzano ISO-8859-1 o windows-1252. Vi è la possibilità di effettuare una conversione verso ISO-8859-1 tramite utf8_decode():$str = utf8_decode($str);
$str = iconv('UTF-8', 'windows-1252', $str);
8. Tento di inserire il simbolo dell'Euro ma non funziona.
I font standard hanno il simbolo dell'euro alla posizione 128. Puoi definire per convenienza una costante come questa:define('EURO', chr(128));
9. Quando tento di generare un PDF, ricevo il seguente messaggio di errore: "Some data has already been output, can't send PDF file".
Non devi inviare al browser nient'altro che il solo PDF: non HTML, nessuno spazio o ritorno di carrello. Un caso comune consiste nell'avere uno spazio bianco indesiderato alla fine dello script di un file incluso.ob_end_clean();
10. Ho disegnato un frame di dimensioni molto precise, ma quando viene stampato noto alcune differenze.
Per rispettare le dimensioni, scegli "Nessuno" nel settaggio della scala di stampa al posto di "Restringi all'area di stampa" nel box di dialogo della stampa.11. Vorrei utilizzare l'intera superficie della pagina, ma quando stampo restano sempre alcuni margini. Come posso eliminarli?
Tutte le stampanti hanno dei margini fisici (diversi a seconda del modello), ed è quindi impossibile rimuoverli e stampare su tutta la superficie della carta.12. Come posso impostare uno sfondo nel mio PDF?
Per un'immagine, effettua una chiamata a Image() all'interno del metodo Header(), prima di ogni altro output. Per impostare un colore di sfondo usa Rect().13. Come posso impostare una specifica intestazione o un piede nella prima pagina?
Semplicemente, testa il numero di pagina:function Header()
{
if($this->PageNo()==1)
{
//First page
...
}
else
{
//Other pages
...
}
}
14. Vorrei poter utilizzare estensioni rese disponibili tramite diversi script. Come posso combinarle?
Utilizza un'ereditarietà a catena. Se hai due classi, diciamo A in a.php:require('fpdf.php');
class A extends FPDF
{
...
}
require('fpdf.php');
class B extends FPDF
{
...
}
require('a.php');
class B extends A
{
...
}
require('b.php');
class PDF extends B
{
...
}
$pdf = new PDF();
15. Come posso inviare il PDF tramite email?
Come ogni altro file, ma una via semplice è utilizzare PHPMailer e il suo sistema di allegati in-memory:$mail = new PHPMailer();
...
$doc = $pdf->Output('', 'S');
$mail->AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
$mail->Send();
16. Qual'è il limite delle dimensioni dei file che posso generare con FPDF?
Non c'è un limite particolare. Ci sono comunque alcune restrizioni:17. Posso modificare un PDF con FPDF?
Grazie all'estensione FPDI, è possibile importare pagine da un documento PDF preesistente:18. Vorrei creare un motore di ricerca in PHP e indicizzare i file PDF. Posso farlo utilizzando FPDF?
No, ma esiste una utility scritta in C e rilasciata sotto licenza GPL, pdftotext, che consente di estrarre il contenuto testuale da un PDF. E' fornita col il pacchetto Xpdf:19. Posso convertire una pagina HTML in PDF con FPDF?
Non pagine del "mondo reale". No, ma esiste una utility scritta in C e rilasciata sotto licenza GPL, htmldoc, che permette di farlo ottenendo buoni risultati:20. Posso concatenare files PDF con FPDF?
Non direttamente, ma è possibile utilizzare FPDI per raggiungere tale obiettivo. Esistono anche alcuni tools liberi a linea di comando: