Comment compléter un formulaire PDF avec PHP ?

En Suisse lors de la souscription à un service, l’utilisateur doit souvent imprimer et envoyer à sa banque une autorisation de « LSV » ou « Débit Direct ». Pour générer ce document pré-rempli il est possible de créer une page HTML que l’utilisateur va imprimer mais une autre solution peut être de compléter un formulaire PDF en PHP pour le proposer au téléchargement.

Nous allons donc voir comment créer un formulaire PDF en utilisant « Master PDF Editor 4 », puis le compléter en PHP en utilisant la librairie « FPDF ». Tous ces outils sont gratuits ou open-source.

Créer un formulaire PDF (facultatif)

Dans cet article, nous utilisons le logiciel Master PDF Editor 4 disponible à l’adresse suivante : https://code-industry.net/masterpdfeditor/

Nous allons créer un formulaire d’inscription simple contenant un nom, un prénom et une date. Vous pouvez bien entendu partir de n’importe quel formulaire PDF pré-existant et le modifier avec les outils indiqué ici.

Il faut tout d’abord créer un PDF vide. Pour cela cliquer sur File > New > Blank PDF.

Puis nous utilisons l’outil « Insert text » pour créer nos labels et l’outil « Line » pour symboliser les lignes à compléter.

Nous créons ensuite, trois champs de formulaire de type « Text field ».

Dans l’onglet Général, dans le panneau latéral droit, vous pouvez changer le nom du champ. C’est ce nom qui sera utilisé pour compléter le formulaire en PHP. Voici donc le formulaire PDF final :

Remplir un formulaire PDF avec PHP

Pour remplir notre formulaire d’inscription en PHP, nous allons utiliser la bibliothèque FPDF (http://www.fpdf.org/) et en particulier le script FPDM disponible à l’adresse suivante : http://www.fpdf.org/en/script/script93.php

Dans notre exemple nous allons utiliser un tableau pour compléter notre formulaire.

Le code PHP est le suivant :

<?php
require('fpdm.php');

//Tableau contenant les paramètres à passer au PDF
$fields = array(
'nom' => 'Doe',
'prenom' => 'John',
'date' => date('d/m/Y'),
);

//Le paramètre correspond au chemin vers le formulaire PDF
$pdf = new FPDM('example_formulaire.pdf');
$pdf->Load($fields, false); // le second paramètre vaut false si les valeurs sont en ISO-8859-1, vrai si UTF-8
$pdf->Merge();

/*
Le premier paramètre peut prendre 4 valeurs :
D pour que l’utilisateur soit obligé de télécharger le fichier
I pour afficher le fichier dans le navigateur
F pour sauvegarder le document en local
S pour retourner le document en tant que chaine de caractère.
Le deuxième paramètre est le nom du fichier
*/
$pdf->Output("D", "example_formulaire.pdf");

Je recommande d’utiliser le paramètre « D » car la plupart des lecteurs PDF intégrés dans les navigateurs ne gèrent par les formulaires PDF.

Lors de la première tentative de faire fonctionner ce script vous aurez probablement l’erreur suivante :

FPDF-Merge Error: field nom not found

Le PDF n’est pas compatible avec le script FPDM. Pour le rendre compatible, vous pouvez utiliser l’outil « PDFtk » disponible à l’adresse https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/. Une fois cette outil installé, il suffit de lancer la commande suivante pour générer notre PDF compatible avec FPDM :

pdftk example_formulaire.pdf output example_formulaire_compatible.pdf

Nous pouvons maintenant modifier le code pour prendre le nouveau formulaire PDF :

$pdf = new FPDM('example_formulaire_compatible.pdf');

L’utilisateur peut à présent télécharger le formulaire PDF pré-complété :

4 réponses
  1. Managed Services
    Managed Services dit :

    Do you mind if I quote a couple of your articles as long as I provide credit and sources back to
    your webpage? My blog site is in the very same niche as
    yours and my visitors would genuinely benefit from some of the information you present here.

    Please let me know if this ok with you. Thank you!

    Répondre
  2. younes
    younes dit :

    I test your script but I have this msg : FPDF-Merge Error: Incremental updates are not supported ????
    thanks

    Répondre
  3. aymeric
    aymeric dit :

    Bonjour

    Merci pour l’article avant tout. J’ai suivi à la lettre la procédure (notamment pdftk) mais lorsque je lance le script, j’ai toujours « FPDF-Merge Error: field addresse not found » et pas de pdf. J’ai créé le formulaire pdf vierge avec openoffice et masterpdf, c’est la même chose.
    Merci pour votre aide

    Répondre

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *