Présentation
Le plugin génère des fichiers PDF à partir d’un squelette écrit au format HTML 4.
Il vous permet donc de créer un PDF réellement sur mesure sans d’autre compétence que de connaître le HTML 4 et CSS.
Que ce soit un squelette pour vos articles, vos rubriques, votre plan de site ou d’autres éléments plus spécifiques, spiPDF génère le contenu en PDF.
Plusieurs librairies, plusieurs possibilités
Le plugin [1] se base - au choix de l’utilisateur - sur plusieurs classes de génération de PDF à partir de HTML :
Par défaut, le plugin utilise mPDF. Vous verrez plus bas dans cet article comment utilisez un autre librairie à la place.
Chacune des classes à ses avantages et ses inconvénients. On notera par exemple que mPDF géré le positionnement flottant (“float”) des éléments ce qui est indéniablement un plus pour de la génération d’article contenant des images.
N’hésitez pas à donner votre avis et vos expériences sur les différentes librairies dans les commentaires de l’article.
Pré-requis
Pour un fonctionnement optimal, je vous conseille vivement PHP5 et je n’ai d’ailleurs pas testé le plugin avec PHP4 (sérieusement, il y a encore des gens avec PHP4 ?!).
Les librairies devant-être installées séparément, vous pouvez en choisir une compatible avec PHP4 mais je ne vous garanti pas le fonctionnement.
Téléchargement et installation du plugin
- A télécharger sur la zone via SVN
- Ou téléchargement du ZIP généré automatiquement toutes les heures.
Son installation reste des plus classique (téléchargement, installation dans le répertoire plugins/ et activation via l’interface privée).
Ancienne version 0.1.0
Vous pouvez, si vous rencontrez des soucis avec la version 0.2.0, essayer la version 0.1.0 qui n’utilise que HTML2PDF.
Téléchargement et installation des librairies requises
Attention ! Depuis la version 0.2.0, le plugin n’intègre plus les librairies externes.
Vous devez les télécharger sur leurs sites respectifs et les décompresser dans un répertoire lib/ à la racine de votre site ou dans un répertoire lib/ dans le répertoire du plugin :
Les dossiers doivent se nommer exactement respectivement mpdf, html2pdf ou dompdf (sans majuscules).
Rendu obtenu avec les différentes librairies
Après un test simple de chacune des librairies, voici les résultats que j’ai obtenu :
- mPDF version 5.3 du 27/07/2011 : bon rendu général
- HTML2PDF version 4.03 du 27/05/2011 : rendu du texte correct, problème avec certains positionnements d’images
- domPDF version 0.6.0 beta2 de 02/2011 : problème d’encodage des caractères
Utilisation
Une étape supplémentaire suffit pour commencer à utiliser le plugin
Ajoutez un lien hypertexte vers le squelette du plugin, typiquement dans votre squelette article.html. Voici à quoi doit ressembler ce lien pour un article :
- [<a href="[(#URL_PAGE{spipdf}
- |parametre_url{spipdf,spipdf_article}
- |parametre_url{id_article,#ID_ARTICLE}
- |parametre_url{nom_fichier,article_#ID_ARTICLE})]">
- télécharger l'article au format PDF</a>]
Mise en page personnalisée
C’est tout l’intérêt du plugin : permettre une mise en page personnalisée sans connaître le PHP.
Pour obtenir un PDF sur mesure, vous pouvez :
- soit modifier le squelette qui se trouve dans le répertoire du plugin : spipdf_article.html
- soir créer votre propre squelette et modifier la balise #URL_PAGE pour qu’elle appelle bien votre squelette à la place de spipdf_article (remplacer spipdf_article par le nom de votre squelette)
Par exemple, vous avez dans votre répertoire squelette, un squelette plan_site_pdf.html que vous souhaitez utiliser pour générer une sortie PDF de votre plan de site.
Il vous suffira d’appeler ce squelette/PDF de la façon suivante :
- [<a href="[(#URL_PAGE{spipdf}
- |parametre_url{spipdf,plan_site_pdf}
- |parametre_url{nom_fichier,plan_site_pdf})]">
- télécharger le plan de site au format PDF</a>]
Ce qui donnera l’URL : http://monsite.tld/spip.php?page=spipdf&spipdf=plan_site_pdf.html
Liens vers des articles SPIP dans le PDF
Si vous utilisez des liens internes du type [->art2] dans vos articles,
il est nécessaire d’utiliser le filtre url_abs sur les balises
DESCRIPTIF, CHAPO, TEXTE, PS et NOTES pour que les liens dans votre PDF pointent bien sur votre site.
Nom de fichier personnalisé
Par défaut, les fichiers PDF se nommeront document.pdf.
Si vous souhaitez préciser un nom particulier pour votre fichier, vous devrez préciser, comme dans les exemples ci-dessus, le paramètre nom_fichier dans la balise #URL_PAGE.
Choix de la librairie de génération
Pour sélectionner l’une ou l’autre des librairies supportées, vous devez changer la valeur de l’attribut lib_pdf dans la balise
Les valeurs possibles sont mpdf / html2pdf / dompdf
Vous pouvez utiliser une librairie différente par type de squelette.
Format, orientation des pages et autres subtilités
Chaque librairies autorisent la mise en page directement depuis le squelette HTML mais pas de la même façon.
Pour plus de simplicité, le format (A4, A5, Letter...) est cependant gérés par le plugin depuis cette balise page pour toutes les librairies.
Pour le reste (marge, bordure, header, footer...) chaque outils à son propre fonctionnement mais tout ceci sans toucher au code du plugin.
mPDF
La librairie utilise le sélecteur CSS @page. Ceci est également explicité dans la documentation (en anglais) de la bibliothèque.
HTML2PDF
La librairie utilise les paramètres précisés via la balise
Vous trouverez plus d’informations sur le wiki de la librairie et plus particulièrement sur la section concernant la fameuse balise page.
dompdf
Le support étant expérimental, je n’ai pas plus d’informations pour l’instant à fournir. A voir sur le site de cette librairie.
Contraintes et bugs connus
Certaines balises HTML peuvent ne pas être gérées par le plugin
C’est notamment le cas de balises qui ne sont pas gérées par la librairie que vous avez choisi d’utiliser. Dans ce cas, vous devriez obtenir une erreur à la génération du PDF ou un affichage dégradé. Dans cette situation, 2 solutions :
- le HTML qui pose problème est dans votre squelette ? et bien... trouvez autre chose en attendant mieux (mais signalez-le quand même dans les commentaires)
- le HTML est généré par SPIP ? Signalez-le dans les commentaires pour une mise à jour du plugin
Certaines balises CSS ne sont pas gérées par le plugin
Bien entendu, dans ce cas, l’affichage au format PDF sera différent de l’affichage au format HTML. On notera par exemple que le positionnement float est géré en partie par mPDF et pas du tout par HTML2PDF.
Vous devrez palier à certaines contraintes de positionnement en utilisant des tableaux imbriqués (snif !)
Encore une fois, toutes ces contraintes sont explicitées sur les site et les forums des librairies respectives.
Changer l’encodage utilisé pour la génération de PDF
Le plugin génère les PDF en UTF-8. Certaines personnes ont rencontré des problèmes de génération des contenus dans cet encodage.
Pour changer ce comportement, et utiliser ISO-8859-15, vous devez changer la constante suivante dans votre fichier d’options :




spiPDF v0.2.0
Vos commentaires
# Le 21 mai à 21:54, par paolo
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Jusqu’à maintenant j’ai obtenu les meilleurs résultats avec tcpdf. Y a-t-il le project d’inclure ce système aussi, ou est-ce trop grand ?
Répondre à ce message
# Le 18 mai à 14:02, par bruno31
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
JAVASCRIPT dans le squelette :
Bonjour
J’ai un squelette spécifique pour générer mon PDF.
Si j’insère du JAVASCRIPT dans ce squelette, est-ce que le résultat affiché sera pris en compte par le générateur de PDF ?
Répondre à ce message
# Le 23 mars à 15:37, par bruno31
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Conseil pour la mise en page avec mPDF :
La gestion des FLOAT et des div imbriquées est des plus approximative. Pourtant c’est mPDF qui s’en sort le mieux.
Idem pour les background et les border.
Faire une mise en page, même simple devient un exercice très difficile voir impossible.
Alors, le mieux est de tout faire avec des tableaux. Là, on arrive à positionner des blocs assez correctement.
# Le 26 mars à 18:47, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Bonjour,
Il est difficile de trouver une classe PDF qui fait tout correctement. Il faut cibler selon les usages.
Il faut en effet s’orienter vers une mise en page très basique HTML 4 pour un rendu correct.
# Le 29 mars à 11:49, par bruno31
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Un autre conseil : si vous rencontrez des problèmes de mise en page des images, essayez tout d’abord de neutraliser la fonction spipdf_nettoyer_html présente dans spippdf.php du plugin.
Il suffit de mettre au début de la fonction un :
return $html;Ensuite vous déplacez progressivement cette ligne dans la fonction pour activer les traitements de filtrage au fur et à mesure.
Yves a codé cette fonction pour ces propres besoins et certains traitements ne vous conviendront peut-être pas ?
Par exemple, les titres et descriptions d’image sont systématiquement supprimées.
De plus, certains traitements visent à palier une insuffisance dans les librairies. Mais comme les librairies évoluent, il se peut que les traitements deviennent inutiles, voir contre-productifs.
# Le 3 avril à 09:27, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Dès que j’ai un peu de temps, je coderais quelques choses de plus modulaire
Merci pour tes retours.
Répondre à ce message
# Le 24 février 2011 à 06:35, par livier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Après mes petits problèmes de mise en forme de la version 0.1, je viens voir ce que donne la version 0.2 ...
Je retombe sur les mêmes défauts, alors que je n’ai même pas installé les librairies... j’ai l’impression d’un cache qui reviens. Peux tu nous dire ou se cache le fichier pdf généré pour que je puisse le supprimer et refaire des essais propres en testant les 3 librairies.
Pour l’install des librairies :
/spip/plugins/lib/est il un endroit correct ou il vaut mieux/spip/libou encore/spip/plugins/spipdf/lib. Je préfèrerais le premier si cela ne pose pas de problème (passera mieux dans ma sauvegarde).# Le 24 février 2011 à 08:24, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Bonjour,
Les fichiers PDF sont mis en cache de la même façon que les fichiers HTML ; dans le cache de SPIP.
Mais il est vrai que je n’avais pas pensé à une chose : il n’y a pas de bouton « recalculer le PDF » ;)
Donc en attendant mieux, plusieurs possibilités :
Pas d’autre solutions à proposer actuellement mais je vais y réfléchir.
# Le 24 février 2011 à 16:50, par livier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Je viens de perdre un long post d’explication de retour d’expérience ... M....
Je reprend caaalmement et un peu plus court !
Sur les 3 endroits que j’avais évoqué pour placer les librairies, seul
/spip/libsemble fonctionner. Les deux autres emplacements me renvoient au lieu du fichier pdf, le message suivant :En plaçant mes librairies ainsi :
/spip/lib/mpdfj’obtiens l’ouverture d’un fichier pdf ... mais c’est une page blanche.Je suis en spip mutualisé et les droits sur les répertoires de librairie sont : admin.www-data 755 . Y a t’il là une partie de la difficulté ?
# Le 24 février 2011 à 17:30, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
La librairie dans le répertoire /plugins/spipdf/lib/mpdf devrait en théorie fonctionner puisque je teste sur /lib et sur /plugins/spipdf/lib/mpdf
Concernant la page blanche, on ne m’a encore pas remonté ce type de bug alors là je ne vois pas. Essaye en utilisant une autre librairie (HTML2PDF par exemple).
Merci de préciser la version de PHP et le système d’exploitation de test.
# Le 25 février 2011 à 06:50, par livier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Pour répondre à ta question sur les versions utilisée :
Mon seveur en ligne est une part de chez Gandi.
Sur mon serveur en ligne
Phpinfo me renvoie :
** PHP Version 5.2.4-2ubuntu5.12
Linux gandiaxe2 2.6.18-xenU #1 SMP Tue Nov 24 18:35:42 CET 2009 i686 **
Cela répond il à ta question ou tu veux que je te renvoies des détails ?
Sur mon serveur local :
**PHP Version 5.3.2-1ubuntu4.7
Linux montreal1 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 21:21:01 UTC 2011 i686 **
Je continue de tomber sur des sorties pdf avec une page vide, à partir de mon serveur en ligne.
Par contre sur mon serveur local j’obtiens des pdf qui ont les mêmes défauts qu’avec la première version du plugin (librairrie html2pdf) . J’essaye une autre librairie, pour voir, mais le pdf reste identique. Je pousse le bouchon en cherchant l’erreur :
<page lib_pdf="paspdf" orientation="P" format="letter" backtop="7mm" backbottom="7mm" backleft="10mm" backright="10mm">Me renvoie encore le même pdf, cela ne devrait pas !
J’ai l’impression que vider le cache ne suffit pas !?!
# Le 25 février 2011 à 16:49, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Vider le cache suffit ;)
Quand je fais mes tests, j’ajoute &var_mode=calcul sur mes liens de génération et ça fonctionne.
Concernant la page blanche, je ne vois pas. As-tu essayé avec une autre lib ? Est-ce que ton serveur de prod affiche les erreurs d’exécution de PHP ?
Quels sont les défauts que tu rencontres avec les PDFs ?
# Le 29 mars à 21:41, par thomas
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Bonjour. je viens d’installer ce plugin et je l’ai essayé avec les 3 librairies. Cela fonctionne très bien pour les petits document mais pour un document qui est censé faire 57 pages : page blanche. Le bug semble déjà connu. Cordialement.
# Le 29 mars à 22:06, par thomas
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
précisions la version mpdf est 5.4 (15/2/12)
# Le 3 avril à 09:25, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Bonjour,
Oui, ce bug est récurrent. Pouvez-vous m’envoyer le contenu de cet article que je fasse des tests dès que possible (yvestan chez gmail)
Répondre à ce message
# Le 25 mars à 12:39, par dreline
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Bonjour,
J’ai eu le bug des pdf vides sur l’ URL ci-dessous, j’ai corrigé en mettant à jour à la dernière version 56015, mais comme c’était insuffisant j’ai commenté les appels à preg_replace_callback, l’un après l’autre. Celui qui a fonctionné est celui de la ligne 105 : // supprimer les spans autour des images et récupérer le placement
URL :
http://www.sden.org/polaris/aides-de-jeu-25/lieux-et-decors/article/les-etablissements-de-loisirs
# Le 26 mars à 18:58, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Merci pour ce retour, je vais regarder ce qui pose problème dans ces expressions régulières. Quelle version de SPIP utilise tu ?
# Le 26 mars à 19:34, par dreline
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
C’est la version SPIP 2.1.11
Répondre à ce message
# Le 26 mars à 19:31, par dreline
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
C’est la version SPIP 2.1.11
Répondre à ce message
# Le 9 mars à 14:53, par Alexandra
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Bonjour Yves, ce plugin fonctionne t-il en SPIP 3 ? L’as tu essayé ? ou d’autres ? des retours ? merci beaucoup et bonne journée
# Le 9 mars à 17:28, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Bonjour Alexandra,
Non, je n’ai pas essayé. J’essaierais ça prochainement... Tiens moi au courant de son fonctionnement (ou non) si tu essayes de ton côté.
Bonne journée
# Le 20 mars à 22:10, par Alexandra
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Bonjour Yves,
Je viens d’installer le plugin sur une svn de branche stable en version 2.
Mon MAMP était à 32 mo de memory limite dans php.ini et ca ne lui a pas plus. J’ai du lui allouer 100 mo pour être tranquile, mais peut être que moins de mémoire est possible.
Cette nouvelle librairie est-elle bien plus gourmande que celle de la version V1 ?
Quelle valeur tu mets toi en memory limite ? Je ne suis pas sure d’avoir la main sur le php.ini du futur serveur de prod. Je vais peut être revenir à une version antérieur ? des retours à ce sujet ? Merci
ps : on me glisse dans l’oreillette que 32 c’était de toute façon pas beaucoup et qu’on peut mettre 128mo facile sur de la prod.
# Le 26 mars à 18:56, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Alexandra, merci pour ton retour.
Effectivement, 32 Mo ce n’est pas énorme pour des librairies de génération de PDF ou des scripts des génération d’images qui utilisent l’extension GD de PHP par exemple.
Mon plugin en tant que tel ne consomme pas beaucoup de mémoire. Ce sont bel et bien les librairies de génération de PDF depuis le HTML qui demande de la ressource machine.
Je ne peux pas te donner de chiffre précis car je n’ai pas les même memory_limit selon les machines et les applications mais effectivement, tu peux directement passer à 128 Mo pour ton MAMP. Et ton serveur de production devrait bien avoir au moins 128 Mo ;)
Répondre à ce message
# Le 16 mars à 14:29, par bruno31
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
mPDF trop buggué :
Ce message juste pour dire que le support CSS de mPDF est plus qu’approximatif.
Je tente de faire des mises en page, pourtant simples, et je galère. Par exemple, afficher du texte dans une DIV avec une certaine taille et une couleur de fond. Et bien c’est presque impossible.
Je découvre des tas de bugs, tous plus bizarres les uns que les autres. Certaines limitations sont connues et documentées. Mais il y en a beaucoup d’autres en réalité.
Plus grave, il y a un forum sur le site mais l’auteur de la librairie est aux abonnés absents. Et quand on lit ses anciennes réponses, on sent bien qu’il a fait la librairie pour ses besoins personnels et qu’il n’a pas l’intention de la maintenir.
Je ne lui jette pas la pierre. Il est déjà bien gentil de la donner gratuitement. Mais je constate c’est tout.
Est-ce que les autres librairies sont maintenues ?
domPDF par exemple ?
# Le 16 mars à 15:01, par bruno31
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Je viens d’essayer dompdf :
- la dernière version prendrait partiellement en charge le FLOAT. Mais l’activation de l’option provoque un plantage PHP chez moi.
- problème d’affichage en UTF-8
- La fonction de génération de la table des matières n’existe pas
- je n’ai pas trouvé l’info sur la gestion des entêtes et pied-de-page bien que cela semble possible de le faire
Je n’ai pas essayé HTML2PDF mais la lecture du wiki m’a suffit :
- pas de table des matières
- pas de header et footer
- doc très sommaire
# Le 26 mars à 18:50, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
dompdf est maintenu et le mainteneur fait des efforts pour gérer correctement le float mais ce n’est pas une mince affaire
Il me semble que HTML2PDF est également bien suivi sur son forum.
mPDF est un mix de HTML2PDF et FPDF
Répondre à ce message
# Le 8 mars à 19:08, par bruno31
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Yves
Peux-tu me confirmer que les paramètres de la balise
<page>dans le squelette ne sont pas exploitées ? sauf la lib.Si oui, pourquoi ?
# Le 8 mars à 21:51, par bruno31
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
En tous cas, c’est confirmé par le code de spipdf.php.
Pour prendre en compte les paramètres de la balise page, j’ai remplacé la ligne 258 par :
$format_page = $GLOBALS['valeurs_page']['format']; $backtop = $GLOBALS['valeurs_page']['backtop']; $backbottom = $GLOBALS['valeurs_page']['backbottom']; $backleft = $GLOBALS['valeurs_page']['backleft']; $backright = $GLOBALS['valeurs_page']['backright']; $margin_header = $GLOBALS['valeurs_page']['margin_header']; $margin_footer = $GLOBALS['valeurs_page']['margin_footer'];et la ligne 274 par :
$mpdf = new mPDF(SPIPDF_CHARSET, $format_page, 0, "", $backleft, $backright, $backtop, $backbottom, $margin_header, $margin_footer);A intégrer peut-être dans une prochaine mise à jour du plugin ?
# Le 9 mars à 13:20, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Il faut que je regarde plus spécifiquement mais j’avais normalement prévu le coup avec le array $possible_librairies ligne 203.
Il doit falloir mettre ’traite_balise_page’ => false pour mpdf pour ne pas que ça passe par la fonction traite_balise_page qui supprime effectivement la balise page avant l’instanciation de la classe de génération de PDF.
Si ça fonctionne, je changerais pour que ’traite_balise_page’ soit sur false par défaut.
# Le 9 mars à 15:25, par bruno31
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Yves
En tous cas, avec les modifs que j’ai faites (message plus haut), cela marche impeccable. Et je peux régler toutes les marges comme je veux.
A l’analyse du code, il m’a semblé comprendre qu’il s’agissait d’un oubli. Alors que le constructeur de la classe mPDF peut prendre en compte ces paramètres de marge.
# Le 9 mars à 17:24, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
As tu essayer la modification que je t’ai indiqué ?
# Le 12 mars à 18:51, par ?
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Je viens t’essayer ta proposition de modif mais cela ne marche pas.
Normal, puisque dans la ligne 274, il manque les paramètres de marges dans le construction de classe mPDF.
# Le 15 mars à 15:50, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Je pensais qu’il n’était pas nécessaire de passer les paramètres au constructeur mpdf s’ils étaient présent dans la balise page. C’est peut-être avec HTML2PDF que ça fonctionne ainsi.
Je modifierais mon code
Répondre à ce message
# Le 14 mars à 16:18, par bruno31
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
mPDF : comment obtenir des Footers différents sur page paire et impaire :
Je n’arrivais pas à obtenir des pieds de page différents sur les pages paires et impaires.
Sur toutes les pages, j’avais le footer défini en « ODD »
Je me suis arraché les cheveux pendant des heures avant de trouver la solution :
Il faut modifier spipdf.php et ajouter après le constructeur mPDF à la ligne 276 :
$mpdf->mirrorMargins = true;L’explication est donnée ici : http://www.mpdf1.com/mpdf/forum/com...
# Le 15 mars à 15:48, par Yves Tannier
En réponse à : spiPDF v0.2.0 : : générer des contenus sur mesure en PDF
Merci pour le retour ;)
Répondre à ce message