diff -urN fpdf153.orig/FAQ.htm fpdf153/FAQ.htm --- fpdf153.orig/FAQ.htm 2006-03-28 16:47:20.000000000 +0200 +++ fpdf153/FAQ.htm 2008-01-09 15:05:04.000000000 +0100 @@ -1,54 +1,67 @@ - -
- -1. Quelle est exactement la licence de FPDF ? Y a-t-il des restrictions d'utilisation ?
+ + + +1. Quelle est exactement la licence de FPDF ? Y a-t-il des restrictions d'utilisation ?
FPDF est Freeware (c'est indiqué au début du fichier source). Il n'y a pas de restriction d'usage. Vous pouvez l'incorporer librement dans votre application (commerciale ou non), avec ou sans modification. Vous pouvez également le redistribuer. -2. Lorsque j'essaie de créer un PDF, plein de caractères bizarres s'affichent à l'écran.
+2. Lorsque j'essaie de créer un PDF, plein de caractères bizarres s'affichent à l'écran.
Ces caractères "bizarres" sont en fait le contenu réel du PDF. Ce comportement est un bug d'IE. Lorsqu'il reçoit d'abord une page HTML, puis un PDF à partir de la même URL, il l'affiche directement sans lancer le plug-in Acrobat. Cela arrive fréquemment en cours de développement : à la moindre erreur de script, une page HTML est envoyée, et après correction, le PDF arrive. -3. J'essaie de générer un PDF et IE m'affiche une page blanche. Que se passe-t-il ?
+3. J'essaie de générer un PDF et IE m'affiche une page blanche. Que se passe-t-il ?
Tout d'abord, vérifiez que vous n'envoyez rien au navigateur après le PDF (même pas un espace ou un retour-chariot). Vous pouvez mettre un exit juste après l'appel à la méthode Output() pour en être sûr. -- -<INPUT TYPE="HIDDEN" NAME="ext" VALUE=".pdf"> - - |
<INPUT TYPE="HIDDEN" NAME="ext" VALUE=".pdf">
+
-
-//Détermination d'un nom de fichier temporaire dans le répertoire courant -$file=basename(tempnam(getcwd(),'tmp')); -//Sauvegarde du PDF dans le fichier -$pdf->Output($file); -//Redirection JavaScript -echo "<HTML><SCRIPT>document.location='getpdf.php?f=$file';</SCRIPT></HTML>"; - - |
//Détermination d'un nom de fichier temporaire dans le répertoire courant
+$file=basename(tempnam(getcwd(),'tmp'));
+//Sauvegarde du PDF dans le fichier
+$pdf->Output($file);
+//Redirection JavaScript
+echo "<HTML><SCRIPT>document.location='getpdf.php?f=$file';</SCRIPT></HTML>";
+
-
-<?php -$f=$HTTP_GET_VARS['f']; -//Contrôle du fichier (à ne pas oublier !) -if(substr($f,0,3)!='tmp' or strpos($f,'/') or strpos($f,'\\')) - die("Nom de fichier incorrect"); -if(!file_exists($f)) - die("Le fichier n'existe pas"); -//Traitement de la requête spéciale IE au cas où -if($HTTP_SERVER_VARS['HTTP_USER_AGENT']=='contype') -{ - Header('Content-Type: application/pdf'); - exit; -} -//Envoi du PDF -Header('Content-Type: application/pdf'); -Header('Content-Length: '.filesize($f)); -readfile($f); -//Suppression du fichier -unlink($f); -exit; -?> - - |
<?php
+$f=$HTTP_GET_VARS['f'];
+//Contrôle du fichier (à ne pas oublier !)
+if(substr($f,0,3)!='tmp' or strpos($f,'/') or strpos($f,'\\'))
+ die("Nom de fichier incorrect");
+if(!file_exists($f))
+ die("Le fichier n'existe pas");
+//Traitement de la requête spéciale IE au cas où
+if($HTTP_SERVER_VARS['HTTP_USER_AGENT']=='contype')
+{
+ Header('Content-Type: application/pdf');
+ exit;
+}
+//Envoi du PDF
+Header('Content-Type: application/pdf');
+Header('Content-Length: '.filesize($f));
+readfile($f);
+//Suppression du fichier
+unlink($f);
+exit;
+?>
+
-
-//Détermination d'un nom de fichier temporaire dans le répertoire courant -$file=basename(tempnam(getcwd(),'tmp')); -rename($file,$file.'.pdf'); -$file.='.pdf'; -//Sauvegarde du PDF dans le fichier -$pdf->Output($file); -//Redirection JavaScript -echo "<HTML><SCRIPT>document.location='$file';</SCRIPT></HTML>"; - - |
//Détermination d'un nom de fichier temporaire dans le répertoire courant
+$file=basename(tempnam(getcwd(),'tmp'));
+rename($file,$file.'.pdf');
+$file.='.pdf';
+//Sauvegarde du PDF dans le fichier
+$pdf->Output($file);
+//Redirection JavaScript
+echo "<HTML><SCRIPT>document.location='$file';</SCRIPT></HTML>";
+
-
-function CleanFiles($dir) -{ - //Efface les fichiers temporaires - $t=time(); - $h=opendir($dir); - while($file=readdir($h)) - { - if(substr($file,0,3)=='tmp' and substr($file,-4)=='.pdf') - { - $path=$dir.'/'.$file; - if($t-filemtime($path)>3600) - @unlink($path); - } - } - closedir($h); -} - - |
function CleanFiles($dir)
+{
+ //Efface les fichiers temporaires
+ $t=time();
+ $h=opendir($dir);
+ while($file=readdir($h))
+ {
+ if(substr($file,0,3)=='tmp' and substr($file,-4)=='.pdf')
+ {
+ $path=$dir.'/'.$file;
+ if($t-filemtime($path)>3600)
+ @unlink($path);
+ }
+ }
+ closedir($h);
+}
+4. J'envoie des paramètres en utilisant la méthode POST et les valeurs n'apparaissent pas dans le PDF.
+4. J'envoie des paramètres en utilisant la méthode POST et les valeurs n'apparaissent pas dans le PDF.
C'est un problème qui affecte certaines versions d'IE (en particulier la première 5.5). Voir la question précédente pour les moyens de le contourner. -5. Lorsque j'utilise une session PHP, IE n'affiche plus mon PDF mais propose de le télécharger.
+5. Lorsque j'utilise une session PHP, IE n'affiche plus mon PDF mais propose de le télécharger.
C'est un problème qui affecte certaines versions d'IE. Pour le contourner, ajoutez la ligne -suivante avant session_start() :- -session_cache_limiter('private'); - - |
session_cache_limiter('private');
+6. Quand je suis en SSL, IE n'arrive pas à ouvrir le PDF.
-Le problème peut être résolu en ajoutant cette ligne :- -Header('Pragma: public'); - - |
7. Quand j'exécute un script j'obtiens le message "FPDF error: Don't alter the locale before including class file".
-Lorsqu'on configure le séparateur décimal comme virgule avant d'inclure un fichier, il y a un -bug dans certaines versions de PHP et les -nombres décimaux sont tronqués. Il ne faut donc pas faire d'appel à setlocale() avant d'inclure la -classe. Sous Unix, il ne faut pas non plus définir la variable d'environnement LC_ALL, car cela -est équivalent à faire un appel à setlocale(). -8. J'essaie de mettre un PNG et Acrobat me dit "Une erreur est survenue lors du traitement d'une page. Une erreur d'affichage est survenue".
-Acrobat 5 a un bug et ne peut pas afficher les images transparentes monochromes (i.e. avec 1 bit par pixel). -Enlevez la transparence ou passez votre image en 16 couleurs (4 bits par pixel) ou plus. -9. J'ai l'erreur suivante quand j'essaie de générer un PDF : Warning: Cannot add header information - headers already sent by (output started at script.php:X)
+6. Quand je suis en SSL, IE n'arrive pas à ouvrir le PDF.
+Le problème peut être résolu en ajoutant cette ligne : +Header('Pragma: public');
+7. Les caractères accentués sont remplacés par des caractères bizarres, par exemple é.
+Il ne faut pas utiliser l'encodage UTF-8. Les polices standard de FPDF utilisent l'ISO-8859-1 ou Windows-1252. +On peut effectuer une conversion en ISO-8859-1 grâce à utf8_decode() : +$str = utf8_decode($str);
+$str = iconv('UTF-8', 'windows-1252', $str);
+8. Comment mettre un fond à mon PDF ?
+Pour une image, appelez Image() dans la méthode Header(), avant toute autre écriture. Pour mettre simplement +une couleur, utilisez Rect(). +9. J'ai l'erreur suivante quand j'essaie de générer un PDF : Warning: Cannot add header information - headers already sent by (output started at script.php:X)
Il ne faut rien envoyer d'autre au navigateur que le PDF lui-même : pas d'HTML, pas d'espace, pas de retour-chariot, ni avant ni après. Le script envoie quelque chose à la ligne X. -10. J'essaie d'afficher une variable dans la méthode Header mais rien ne s'imprime.
-Il faut utiliser le mot-clé global, par exemple : -
-
-function Header() -{ - global $titre; - - $this->SetFont('Arial','B',15); - $this->Cell(0,10,$titre,1,1,'C'); -} - - |
10. J'essaie d'afficher une variable dans la méthode Header mais rien ne s'imprime.
+Il faut utiliser le mot-clé global, par exemple : +function Header()
+{
+ global $titre;
+
+ $this->SetFont('Arial','B',15);
+ $this->Cell(0,10,$titre,1,1,'C');
+}
+11. J'ai défini les méthodes Header et Footer dans ma classe PDF mais rien ne s'affiche.
-Il faut créer un objet de la classe PDF et non pas FPDF :- -$pdf=new PDF(); - - |
11. J'ai défini les méthodes Header et Footer dans ma classe PDF mais rien ne s'affiche.
+Il faut créer un objet de la classe PDF et non pas FPDF : +$pdf=new PDF();
+12. Je n'arrive pas à faire de retour à la ligne. J'ai bien mis \n dans la chaîne imprimée par MultiCell mais ça ne marche pas.
+12. Je n'arrive pas à faire de retour à la ligne. J'ai bien mis \n dans la chaîne imprimée par MultiCell mais ça ne marche pas.
Il faut mettre la chaîne entre guillemets et non pas entre apostrophes. -13. J'essaie de mettre le caractère euro mais je n'y arrive pas.
+13. J'essaie de mettre le caractère euro mais je n'y arrive pas.
Pour les polices standard, le caractère euro a pour code 128. Vous pouvez par commodité définir une constante comme suit : -- -define('EURO',chr(128)); - - |
14. Je dessine un cadre avec des dimensions très précises, mais à l'impression je constate des écarts.
+define('EURO',chr(128));
+14. Je dessine un cadre avec des dimensions très précises, mais à l'impression je constate des écarts.
Pour respecter les dimensions, il faut décocher la case "Ajuster" dans la boîte de dialogue d'impression. -15. Je voudrais utiliser toute la surface de la page mais à l'impression j'ai toujours des marges. Comment les enlever ?
+15. Je voudrais utiliser toute la surface de la page mais à l'impression j'ai toujours des marges. Comment les enlever ?
Les imprimantes ont toutes des marges physiques (variables en fonction du modèle), il est donc impossible de les supprimer et d'imprimer sur la totalité de la page. -16. Quelle est la taille limite des fichiers que je peux générer avec FPDF ?
+16. Quelle est la taille limite des fichiers que je peux générer avec FPDF ?
Il n'y a pas de limite particulière. Il existe cependant certaines contraintes : -17. Est-ce que je peux modifier un PDF avec FPDF ?
-Il est possible d'importer un PDF existant grâce à l'extension FPDI :18. Je voudrais faire un moteur de recherche en PHP et indexer des PDF. Est-ce que je peux le faire avec FPDF ?
+17. Est-ce que je peux modifier un PDF avec FPDF ?
+Il est possible d'importer un PDF existant grâce à l'extension FPDI :18. Je voudrais faire un moteur de recherche en PHP et indexer des PDF. Est-ce que je peux le faire avec FPDF ?
Non. Par contre il existe un utilitaire GPL en C, pdftotext, capable d'extraire le contenu -textuel d'un PDF. Il est fourni avec l'archive de Xpdf :19. Est-ce que je peux transformer une page HTML en PDF avec FPDF ?
+textuel d'un PDF. Il est fourni avec l'archive de Xpdf :19. Est-ce que je peux transformer une page HTML en PDF avec FPDF ?
Non, on ne peut convertir que de l'HTML très simple, pas des pages réelles. Par contre il -existe un utilitaire GPL en C, htmldoc, qui permet de le faire et donne de bons résultats :20. Est-ce que je peux concaténer des PDF avec FPDF ?
-Non. Par contre il existe des utilitaires gratuits pour le faire :20. Est-ce que je peux concaténer des PDF avec FPDF ?
+Non. Par contre il existe des utilitaires gratuits pour le faire :