# FAQ

- 1. Quelle est exactement la licence de FPDF ? Y a-t-il des restrictions d'utilisation ?
- 2. J'ai l'erreur suivante quand j'essaie de générer un PDF : Some data has already been output, can't send PDF file
- 3. Les caractères accentués sont remplacés par des caractères bizarres, par exemple Ã©.
- 4. J'essaie de mettre le caractère euro mais je n'y arrive pas.
- 5. J'essaie d'afficher une variable dans la méthode Header mais rien ne s'imprime.
- 6. J'ai défini les méthodes Header et Footer dans ma classe PDF mais rien ne s'affiche.
- 7. 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.
- 8. J'utilise jQuery pour générer le PDF mais il ne s'affiche pas.
- 9. Je dessine un cadre avec des dimensions très précises, mais à l'impression je constate des écarts.
- 10. Je voudrais utiliser toute la surface de la page mais à l'impression j'ai toujours des marges. Comment les enlever ?
- 11. Comment mettre un fond à mon PDF ?
- 12. Comment mettre un en-tête ou un pied spécifique à la première page ?
- 13. J'aimerais utiliser des extensions fournies par différents scripts. Comment les combiner ?
- 14. Comment ouvrir le PDF dans un nouvel onglet ?
- 15. Comment envoyer le PDF par mail ?
- 16. Quelle est la taille limite des fichiers que je peux générer avec FPDF ?
- 17. Est-ce que je peux modifier un PDF avec FPDF ?
- 18. Je voudrais faire un moteur de recherche en PHP et indexer des PDF. Est-ce que je peux le faire avec FPDF ?
- 19. Est-ce que je peux transformer une page HTML en PDF avec FPDF ?
- 20. Est-ce que je peux concaténer des PDF avec FPDF ?

- 1. Quelle est exactement la licence de FPDF ? Y a-t-il des restrictions d'utilisation ?

  La licence de FPDF est permissive : il n'y a pas de restriction d'usage. Vous pouvez l'incorporer librement dans votre application (commerciale ou non), avec ou sans modification.

- 2. J'ai l'erreur suivante quand j'essaie de générer un PDF : Some data has already been output, can't send PDF file

  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. Un cas courant est d'avoir des lignes vides à la fin d'un fichier inclus.
  Le message est éventuellement suivi de cette indication :
  (output started at script.php:X)
  qui vous donne précisément le script et le numéro de ligne où l'envoi est effectué. Si elle n'apparaît pas, ajoutez ceci au tout début de votre script :

      ob_end_clean();

- 3. Les caractères accentués sont remplacés par des caractères bizarres, par exemple Ã©.

  Il ne faut pas utiliser l'encodage UTF-8 avec les polices standards ; elles attendent un encodage windows-1252. On peut effectuer une conversion grâce à iconv :

      $str = iconv('UTF-8', 'windows-1252', $str);

  Ou bien avec mbstring :

      $str = mb_convert_encoding($str, 'windows-1252', 'UTF-8');

  Dans le cas où vous auriez besoin de caractères en dehors de windows-1252, consultez le tutoriel 7 ou bien utilisez tFPDF.

- 4. J'essaie de mettre le caractère euro mais je n'y arrive pas.

  Pour les polices standards, le caractère euro a pour code 128. Vous pouvez par commodité définir une constante comme suit :

      define('EURO', chr(128));

- 5. J'essaie d'afficher une variable dans la méthode Header mais rien ne s'imprime.

  Il faut utiliser le mot-clé `global` pour accéder aux variables globales, par exemple :

      function Header()
      {
          global $titre;

          $this->SetFont('Arial', 'B', 15);
          $this->Cell(0, 10, $titre, 1, 1, 'C');
      }

      $titre = 'Mon titre';

  Il est également possible de passer par une propriété de l'objet :

      function Header()
      {
          $this->SetFont('Arial', 'B', 15);
          $this->Cell(0, 10, $this->titre, 1, 1, 'C');
      }

      $pdf->titre = 'Mon titre';

- 6. 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();

- 7. 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.

- 8. J'utilise jQuery pour générer le PDF mais il ne s'affiche pas.

  Ne faites pas de requête AJAX pour récupérer le PDF.

- 9. Je dessine un cadre avec des dimensions très précises, mais à l'impression je constate des écarts.

  Pour respecter les dimensions, il faut sélectionner "Aucune" au lieu de "Réduire à la zone d'impression" dans la boîte de dialogue d'impression.

- 10. Je voudrais utiliser toute la surface de la page mais à l'impression j'ai toujours des marges. Comment les enlever ?

  Les imprimantes ont 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.

- 11. 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().

- 12. Comment mettre un en-tête ou un pied spécifique à la première page ?

  Il suffit de tester le numéro de page :

      function Header()
      {
          if($this->PageNo()==1)
          {
              //Première page
              ...
          }
          else
          {
              //Pages suivantes
              ...
          }
      }

- 13. J'aimerais utiliser des extensions fournies par différents scripts. Comment les combiner ?

  Utilisez une chaîne d'héritage. Si vous avez deux classes, par exemple A dans a.php :

      require('fpdf.php');

      class A extends FPDF
      {
      ...
      }

  et B dans b.php :

      require('fpdf.php');

      class B extends FPDF
      {
      ...
      }

  alors faites hériter B de A :

      require('a.php');

      class B extends A
      {
      ...
      }

  et faites hériter votre propre classe de B :

      require('b.php');

      class PDF extends B
      {
      ...
      }

      $pdf = new PDF();

- 14. Comment ouvrir le PDF dans un nouvel onglet ?

  De la même manière que pour une page HTML : ajoutez target="_blank" à votre lien ou formulaire.

- 15. Comment envoyer le PDF par mail ?

  Comme n'importe quel autre fichier, mais une manière simple de faire est d'utiliser PHPMailer et sa fonction d'attachement en mémoire :

      $mail = new PHPMailer();
      ...
      $doc = $pdf->Output('S');
      $mail->AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
      $mail->Send();

- 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 :
  - La taille mémoire allouée aux scripts PHP est généralement limitée. Pour de très gros documents, en particulier avec des images, cette limite peut être atteinte (le fichier étant construit en mémoire). Elle est paramétrée dans php.ini.
  - Le temps d'exécution alloué par défaut aux scripts est de 30 secondes. Cette limite peut bien entendu être facilement dépassée. Elle est paramétrée dans php.ini et peut être éventuellement modifiée à l'exécution par set_time_limit().
  Il est possible de contourner la limitation mémoire à l'aide de ce script.

- 17. Est-ce que je peux modifier un PDF avec FPDF ?

  Il est possible d'importer des pages d'un PDF existant grâce à l'extension FPDI. On peut ensuite leur ajouter du contenu.

- 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 gratuit, 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 ?

  On ne peut convertir que de l'HTML très simple, pas des pages réelles. Par contre il existe un utilitaire gratuit, HTMLDOC, qui permet de le faire et donne de bons résultats.

- 20. Est-ce que je peux concaténer des PDF avec FPDF ?

  Pas directement, mais il est possible d'utiliser FPDI pour cela. Des utilitaires gratuits en ligne de commande existent également : pdftk et mbtPdfAsm.