Avertissement de sécurité
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ére 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
A partir de la version v2.0.2 (compatible SPIP 4)
il est nécessaire d’avoir PHP 8.0 ou plus (pour la compatibilité avec les librairies embarquées)
Pour les versions v1.2.0 et précédentes, le plugin requiert :
- PHP 5
- d’installer manuellement dans le répertoire /lib/ une librairie (voir chapitre précédent)
Téléchargement et installation des librairies requises
A partir de la version v2.0.2 (compatible SPIP 4)
Il n’est plus nécessaire d’intégrer les librairies d’une facon externe, elles sont intégrées dans le répertoire vendor
du plugin
Dans les anciennes versions
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 6.0 du 01/03/2015 : 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 abs_url 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 :
define('SPIPDF_CHARSET', 'ISO-8859-15');
Aide au développement
Pour pré-visualiser la page au lieu de générer le PDF, vous pouvez ajouter le paramètre debug_spipdf à l’URL
Par exemple : spip.php?page=spipdf&spipdf=spipdf_article&id_article=1249&nom_fichier=article-1249&debug_spipdf
Discussions par date d’activité
96 discussions
Bonjour,
J’ai un souci avec les images.. Elles ne s’affichent pas.
Php 7.1, Spip 3.2.3, Spipdf 1.2.4, mpdf 6.1
J’ai essayé avec le squelette fourni avec le plugin, ou avec un squelette perso, même résultat.
Les images s’affichent sur la version debug html (debug_spidf). Par contre, le PDF correspondant affiche des croix rouges à la place des images.
J’ai changé la config pour afficher les erreurs :
$this->showImageErrors = true ;
et dans le log apache j’ai donc
[Thu Feb 28 13:05:39.958471 2019] [php7:error] [pid 19965] PHP Fatal error : Uncaught MpdfException : IMAGE Error (http://exemple.fr/local/cache-vignettes/L200xH113/arton526-9e728.jpg?1551357192) : Could not find image file in /home/vinceweb/sites/exemple/web/lib/mpdf/mpdf.php:11752..................
Url absolue ou relative, ça n’a pas l’air de solutionner ...
Quelqu’un à ce problème ? Et une solution, tant qu’à faire ?
Merci d’avance !
Je suis passé sur DomPdf 0.7, et mes images s’affichent
Répondre à ce message
Merci pour ce super plugin.
Un petit truc pour les utilisateurs :
Si vous voulez utiliser spiPDF avec Dompdf > 0.6.2, il faut remplacer la ligne 358 de spipdf_fonctions.php
par
En effet à partir de la version 0.7.0, le fichier dompdf_config.inc.php n’est plus utilisé.
La dernière version de Dompdf peut se trouver là :
https://github.com/dompdf/dompdf/re...
On repends et on recommence, et en plus cette fois ça marche :
ligne 358 par
et ligne 360 par
On peut en passant changer les fonctions obsolètes (lignes 361 et 362) :
Merci, ça à l’air de mieux marcher que mpdf
Répondre à ce message
La création des PDF peut prendre un certain temps : les utilisateurs de sites web étant de plus en plus pressés, il serait peut-être bien de proposer une option pour pouvoir afficher un indicateur d’attente pendant que le fichier est généré ?
Je me demande si c’est possible de faire ça dans le code PhP, ou en CSS.
Bonjour,
J’avoue que je suis pleinement dans ce cas de besoin de montrer le fait que le pdf est entrain de se générer, j’essaie de trouver une solution à mon niveau mais je coince un peu pour le moment.
Répondre à ce message
Bonjour
Comment inclure des polices de caractères personnalisées dans le .pdf ?
Répondre à ce message
Pour info : le Bloc « Compatibilité » de cette page ne mentionne que les versions 2.0 et 2.1 de SPIP. Or ce plugin semble être compatible avec SPIP 3.x.
Quid ?
le script qui synchronise automatiquement les informations n’est pas passé.
J’ai mis manuellement.
Cool. Merci Maïeul.
C’est pas compatible avec SPIP 3.2 ?
je sais pas. Il faut tester en changeant paquet.xml
Je te confirme : compatible 3.2.
Voir https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/spipdf/trunk/paquet.xml#L6
cheers
Répondre à ce message
Hello,
j’ai trouvé un autre bug sur la version 1.03. Plus loin dans les commentaires, quelqu’un se plaignait d’avoir des problèmes sur les images centrées imgxx|center, et j’ai eu le même problème, qui semblait un peu aléatoire mais seules les images centrées étaient touchées, pas les docxx|center.
Je l’ai résolu comme ceci :
* dans le fichier « spipdf_fonctions.php », dans la fonction « spipdf_nettoyer_html »
* inverser les deux premières instructions suivant les commentaires : « supprimer les spans autour des images et récupérer le placement » et « supprimer les spans autour des images »
Je pense que mettre le nettoyage des images centrées (donc sans placement « left » ou « right ») permet de ne plus couper à tort du code HTML dans certains cas...
merci, c’est corrigé dans la version 1.0.4 (je vous fais confiance, et n’ai pas vérifier moi même le résultat) https://zone.spip.org/trac/spip-zone/changeset/101517
Moi j’ai bien vérifié, je n’ai plus de bug, ça marche nickel sur mon site www.absurdephoton.fr (utiliser le lien PDF qui n’apparaît que dans les articles).
Petite précision j’utilise la version mpdf v6.0 sans aucun autre problème, mais pas la 6.1 si quelqu’un a un retour d’expérience ?
Par contre la version 7 change radicalement... le plugin spiPDF n’est donc valable que jusqu’à la version 6.x.
hello, étrange, si tu supprimes les spans d’emblée, comment récupérer le placement float après ? tes float fonctionnent ?
Les float n’ont jamais vraiment fonctionné avec mpdf.
bonjour, c’est un problème de remplacement des tags html, le float fonctionne en dehors du texte,
[(#LOGO_ARTICLE|image_reduire{250}|right)]
qui donne<img src="..." alt="" class="spip_documents_right" onmouseover="" onmouseout="" width="250" height="157">
fonctionne bien.Effectivement ça fonctionne pour les squelettes, mais beaucoup moins bien à l’intérieur des articles...
Répondre à ce message
Bonjour,
Est-il possible d’utiliser spiPDF pour générer un PDF à partir des réponses à un formulaire formidable et de le joindre au mail envoyé à celui qui à répondu au formulaire ?
Merci d’avance,
Cordialement,
Hervé
Répondre à ce message
Bonjour, d’après mes tests en 3.2 + spipr-dist et mpdf, le float n’est pas transmise au style des images du texte, merci
Répondre à ce message
Bonjour,
Savez-vous si le plugin est compatible avec PHP7 ?
Merci à vous :)
Bonjour,
Oui, au moins en 7.0.22.
françois
Répondre à ce message
Bjr,
Le plugin actuellement installé est signalé comme incompatible ou à vérifier pour SPIP 3.2.0 ;
Une MàJ est-elle prévue ?
Salut, pour ce plugin, comme pour les autres :
- les mainteneur·euse·s de plugins le font bénévolement, ils n’ont pas toujour le temps de faire des tests
- tu peux donc leur faciliter la vie en testant les plugins sur un spip 3.2 local : il suffit simplement de modifier le paquet.xml / plugin.xml pour changer les bornes de compatibilités (lire https://contrib.spip.net/Verifier-s...
- si après test en local tu vois que le plugin est compatible, tu le signale (sur le forum du plugin, ou sur la spip-zone) et on marque le plugin comme compatible pour que les autres ne se posent plus la question
- sinon effectivement il faudra attendre qu’une personne se penche sur le plugin pour le mettre à jour (cela peut être toi ! )
Effectivement, passer la balise à
permet de rendre ce plugin compatible SPIP 3.2.0.
attention : cela permet d’activer le plugin. Ensuite il faut s’assurer qu’il est effectivement compatible, c’est à dire que les fonctonnalités fonctionnent. Est-ce bien le cas ?
Oui, oui,
J’ai vérifié, bien sûr ;
Ok, parce que en fait
ne rend pas le plugin compatible, mais seulement activable.
je commite l’information,
ah bah non, Jack l’avait fait https://zone.spip.org/trac/spip-zone/changeset/106993/_plugins_/spipdf
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |