SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 325 visiteurs en ce moment

Accueil > Rédaction > Imprimer et PDF > spiPDF > spiPDF : générer des contenus sur mesure en PDF

spiPDF : générer des contenus sur mesure en PDF

16 février 2011 – par Yves Tannier – 207 commentaires

65 votes

Le plugin spiPDF génère des fichiers au format PDF d’article ou de tout autre élément SPIP, simplement à partir d’un squelette construit au format HTML 4 et facile à modifier.

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

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

  1. [<a href="[(#URL_PAGE{spipdf}
  2. |parametre_url{spipdf,spipdf_article}
  3. |parametre_url{id_article,#ID_ARTICLE}
  4. |parametre_url{nom_fichier,article_#ID_ARTICLE})]">
  5. télécharger l'article au format PDF</a>]

Télécharger

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 :

  1. [<a href="[(#URL_PAGE{spipdf}
  2. |parametre_url{spipdf,plan_site_pdf}
  3. |parametre_url{nom_fichier,plan_site_pdf})]">
  4. télécharger le plan de site au format PDF</a>]

Télécharger

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 du squelette spipdf_article.html ou de votre squelette personnalisé/

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 (voir le squelette spipdf_article.html pour l’exemple)

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 :

  1. define('SPIPDF_CHARSET', 'ISO-8859-15');

Voir en ligne : http://plugins.spip.net/spipdf

Notes

[1Depuis la version 0.2.0

Dernière modification de cette page le 2 décembre 2015

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 30 novembre à 14:33, par Jérôme En réponse à : spiPDF : générer des contenus sur mesure en PDF

    Bonjour, petit retour d’expérience sur spipdf.

    J’ai rencontré de nombreux problèmes avec spipdf pour l’affichage des images. J’ai enfin trouvé la réponse à ce souci : le problème venait de mon hébergement chez Free (je ne sais pas pourquoi). Après une installation en local, tout fonctionnait parfaitement. La solution a donc été d’investir dans un hébergement chez OVH...

    A noter que pour moi spipdf ne gère pas les images au format bmp. Mais c’est vraiment un moindre mal. Bravo pour ce plugin.

    Répondre à ce message

  • Le 16 novembre à 11:36, par AbsurdePhoton En réponse à : spiPDF : générer des contenus sur mesure en PDF

    Génial ce plugin, (presque) aucune difficulté à le mettre en place sur mon site.

    Mais il y a une chose qui cloche : en pré-production les fichiers PDF affichent toutes les images sans aucun problème, celles incluses dans les articles comme les autres.

    Par contre, en hébergement chez OVH les fichiers PDF affichent des petites croix (donc image non trouvée). Ce qui est très étrange c’est qu’en mode debug de spiPDF les images apparaissent bien !

    Mon environnement :

    • SPIP 3.1.3
    • SpiPDF 1.03 avec mPDF 5.7 (ça marche pareil en v6.0)
    • Seule différence entre prod et pré-prod : SSL activé chez OVH (càd tout le site est en HTTPS) et bien sûr l’adresse de base du site


    Vous pouvez tester sur mon site AbsurdePhoton www.absurdephoton.fr : allez sur un article et cliquez sur l’imprimante PDF dans le cadre « Thèmes » à droite - j’ai pour l’instant mis dans le lien le paramètre debug, de cette manière mes visiteurs obtiennent une page web simplifiée qu’ils peuvent imprimer -> il suffit d’enlever le paramètre debug dans la barre d’adresse pour obtenir la version PDF sans images.

    J’ai l’impression que ça vient des adresses en HTTPS, j’ai regardé vite fait le script mpdf.php et j’ai trouvé la partie où le HTTPS est géré, mais je ne m’y connais pas assez en PHP pour arriver à comprendre comment ça marche :(

    • Le 19 novembre à 01:16, par AbsurdePhoton En réponse à : spiPDF : générer des contenus sur mesure en PDF

      J’ai compris pourquoi ça ne marchait pas !

      Chez OVH en hébergement mutualisé, les adresses en http(s) ne sont pas résolues avec le nom de domaine mais avec le nom du serveur. mpdf utilise des fonctions curl en mode client web pour les images, qui ont besoin d’une résolution de nom DNS qui pointe effectivement vers le serveur. La solution est de pouvoir modifier le fichier hosts du serveur, ce qui n’est pas possible en mutualisé :(
      Source : http://stackoverflow.com/questions/23514062/mpdf-not-rendering-images-mpdf-error-image-error-could-not-find-image-file (réponse n°5)

      Pour palier ceci, j’ai été obligé de modifier le script mpdf.php, à l’endroit où il fait les remplacements d’adresses, pour faire pointer les liens au bon endroit (juste les paramètres src des images, pas les href).

      Maintenant ça fonctionne parfaitement :)

    Répondre à ce message

  • Le 16 août à 14:26, par Jérôme En réponse à : spiPDF : générer des contenus sur mesure en PDF

    Bonjour,

    Je me permet de renvoyer un message concernant les problèmes que je rencontre avec spipdf. J’utilise la version 1.0.3, avec SPIP 3.1 et le squelette Escal V3. En résumé, après de très nombreux essais :

    -  avec la librairie mpdf (versions 5.2, 5.6 ou 6.0), rien ne s’affiche sauf une page blanche.

    -  avec la librairie dompdf, le pdf est généré correctement MAIS aucune image ne s’affiche, que ce soit des images hébergées sur mon site ou des images externes (test avec les formats jpg, bmp, gif et png). Le pdf indique simplement « Image not found or type unknow ». Or, j’ai vraiment besoin de pouvoir afficher des images dans mes pdf...

    Auriez vous quelques pistes pour m’aider à résoudre mon problème. Merci beaucoup !

    Répondre à ce message

  • Le 8 juillet à 10:02, par Bouquet En réponse à : spiPDF : générer des contenus sur mesure en PDF

    Bonjour

    J’ai installé le plugin sur deux sites différents et exactement de la même façon et avec les mêmes paramétrages.
    Dans l’un tout fonctionne parfaitement et dans l’autre seul le contenu de l’article s’affiche sans le chemin ni le titre de l’article.

    Code : PDF

    Qu’ai-je bien pu oublier ?

    Jean-Louis

    Répondre à ce message

  • Le 1er juillet à 16:15, par Jérôme En réponse à : spiPDF : générer des contenus sur mesure en PDF

    Bonjour,
    J’ai eu quelques petits problèmes en installant spiPDF. J’ai résolu le conflit avec le plugin spip_bonux grâce à des conseils trouvés dans les commentaires, mais par contre le plugin ne me crée toujours aucun fichier pdf. A la place, il me crée ce qui me semble être une page html vide :
    http://jbouffand.free.fr/spip.php?page=spipdf&spipdf=spipdf_article&id_article=228&nom_fichier=article_228
    Comment faire pour résoudre ce problème ?
    J’utilise spip 3.1 et mpdf 6.0.

    merci !

    • Le 2 juillet à 14:16, par Jérôme En réponse à : spiPDF : générer des contenus sur mesure en PDF

      Bon, après plusieurs essais, je suis parvenu à produire un pdf. Je résume pour ceux que ça pourrait intéresser.

      Ma configuration :
      SPIP 3.1
      Escal V3
      spipdf 1.0.3
      Je n’ai réussi à faire fonctionner le plugin qu’avec la version 0.6.2 de dompdf. Pour l’instant je n’ai pas chercher plus loin.

      J’aimerai quand même savoir comment faire fonctionner le plugin avec la librairie mpdf, car j’ai l’impression a priori que tous les éléments avec la balise « float » ont disparu !
      Merci !

    Répondre à ce message

  • Le 26 mai à 17:55, par Julien En réponse à : spiPDF : générer des contenus sur mesure en PDF

    PDF TRONQUE

    Sur SPIP 3.1, le PDF généré est tronqué dès la première image dans le texte...

    Voici un exemple : http://reporterre.net/Quand-les-enfants-imaginent-un-monde-sans-voitures

    Cliquez sur le PDF, vous verrez que seule l’image LOGO (la première ) est visible, le premier paragraphe, et quand on doit voir la première image jointe, plus rien !!

    Alors que le modèle spip pour le PDF est normal : http://reporterre.net/spip.php?page=article_pdf&id_article=8891&var_mode=calcul

    Une idée ? Quelle serait la balise qu’il n’aime pas avec MPDF ?

    Merci de votre aide,
    Julien

    Répondre à ce message

  • Le 29 mai à 23:26, par Sorensen En réponse à : spiPDF : générer des contenus sur mesure en PDF

    Bonjour
    Excellent plugin, le rendu pdf est vraiment propre.
    Je cherche cependant à le personnaliser, et je n’ai pas trouvé comment faire pour que le texte de l’article ne soit pas centré (visuellement ce n’est pas très heureux).
    A quel endroit faut-il gérer cela ?

    Merci d’avance pour votre aide.

    Répondre à ce message

  • Le 16 mars 2015 à 00:06, par Alain7159 En réponse à : spiPDF : générer des contenus sur mesure en PDF

    Bonjour,

    Très bon plugin !!

    Dans la version 0.2.11, comme dans la version 1.0.1, la feuille de style personnalisée n’est pas prise en compte, alors qu’avec les feuilles de spip, il n’y a pas de souci. Avez-vous des retours identiques ?

    En utilisant un squelette personnalisé, j’obtiens dans le pdf une partie de la balise « page » : df« orientation= »L« format= »A4-L« backtop= »4mm« backbottom= »4mm« backleft= »5mm« backright= »5mm">, et pas de prise en compte de l’orientation paysage). J’ai réussi à feinter ce problème en insérant des espaces avant cette balise...

    Version spip : 3.017 en local Lamp

    • Le 16 mars 2015 à 01:00, par Alain7159 En réponse à : spiPDF : générer des contenus sur mesure en PDF

      Le fichier css personnalisé ne pouvait pas être pris en compte puisque j’avais mal fourni le chemin d’accès

      1. (#CHEMIN{perso.css} au lieu de #CHEMIN{css/perso.css}

      -  Après cette rectification, je me retrouve avec ce message si j’utilise mpdf :
      « Can’t open file lib/mpdf/ttfontdata/dejavusanscondensedB.GSUBGPOStables.dat ».
      -  Si j’utilise html2pdf : « Le type de fichier document texte brut (text/plain) n’est pas pris en charge ».

      Je ne vois rien dans mes fichiers (particulièrement le css perso) qui puissent engendrer ce type de message.

      Si quelqu’un a une idée, je suis preneur. Merci.

    • Le 7 mars à 15:59, par Yohooo En réponse à : spiPDF : générer des contenus sur mesure en PDF

      Bonjour Alain,

      Le dossier lib/mpdf/ttfontdata sert à placer les fichiers relatifs aux typographies visibles dans test pdf

      Il faut tout simplement donner un acces en écriture à ce dossier pour voir disparaître ce message d’erreur.

    Répondre à ce message

  • Le 21 octobre 2015 à 11:57, par Jean-Jacques En réponse à : spiPDF : générer des contenus sur mesure en PDF

    Bonjour,
    J’aimerais que le pdf généré soit « protégé ».
    La doc de la librairie mpdf stipule qu’il faut employer SetProtection
    void SetProtection ( array $permissions [, string $user_password [, string $owner_password [, integer $length ]]])

    Est ce qu’il est possible d’agir sur le plugin, au moment ou il passe les paramètres à la libraire ?
    Enfin bref comment faire svp ?
    Merci !

    • Le 24 octobre 2015 à 18:07, par Yves Tannier En réponse à : spiPDF : générer des contenus sur mesure en PDF

      Bonjour,

      Dans le fichier spipdf_fonctions.php avant $mpdf->WriteHTML($html) ; vous pouvez essayer ajouter $mpdf->SetProtection(vos options) ;

      Je n’ai pas testé ;)

    • Le 25 octobre 2015 à 20:10, par Jean-Jacques En réponse à : spiPDF : générer des contenus sur mesure en PDF

      Bonjour,
      Merci beaucoup. Ci dessous un copier coller du code modifé

      1. // la classe mPDF
      2. $mpdf = new mPDF(SPIPDF_CHARSET, $format_page, 0, "", $backleft, $backright, $backtop, $backbottom, $margin_header, $margin_footer);
      3. $mpdf->SetProtection(array());
      4. $mpdf->WriteHTML($html);

      Télécharger

      Sans options supplémentaires on peut ouvrir le pdf, mais pas l’imprimer, pas le copier, etc,
      donc c’est génial et cela correspond avec ce que le client (un peu parano .. ) m’a demandé
      En cas de mise à jour du plugin, j’imagine que mes modifications seront perdues ?
      Est ce qu’il y a un mécanisme de surcharge du code du plugin ?
      Encore merci !

    Répondre à ce message

  • Le 10 septembre 2015 à 17:50, par Julien En réponse à : spiPDF : générer des contenus sur mesure en PDF

    TEXTE TOUJOURS CENTRE !

    Désolé de demander ceci mais je ne vois pas :
    -  voici le modèle HTML :
    http://ussolidaires.fr/spip.php?page=pdf_attestation&id_inscription=25&nom_fichier=attestation_Koita

    -  Voici le résultat :
    http://ussolidaires.fr/spip.php?page=spipdf&spipdf=pdf_attestation&id_inscription=25&nom_fichier=attestation_Koita

    Pourquoi donc le texte est-il centré dans le PDF ??

    Merci de votre aide.
    Julien

    • Le 10 septembre 2015 à 18:30, par Julien En réponse à : spiPDF : générer des contenus sur mesure en PDF

      Je ferme le ticket ! Le contenu dans un TD est centré...

      Ceci dit je n’arrive pas à l’aligner à gauche : align=left, style=« text-align:left » pour le TD garde le texte centré...

      Je supprime le tableau !

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?
  • [Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Mailsubscribers

    16 janvier 2013 – 274 commentaires

    Ce plugin permet de gérer les inscriptions (ou abonnements) à la diffusion de contenu par email. Mailsubscribers permet de gérer les inscriptions par Opt-in simple ou double et la désinscription par URL. Ce plugin gère également plusieurs listes (...)

  • noiZetier v2

    9 novembre 2012 – 36 commentaires

    Le noiZetier offre une interface d’administration permettant d’insérer au choix des éléments modulaires de squelettes (noisettes) et de les ajouter ainsi à ses squelettes. Compatibilité La version 2 du noizetier fonctionne sous SPIP 3. Elle est (...)

  • cirr : plugin « rédacteur restreint »

    29 octobre 2010 – 60 commentaires

    Ce plugin « cirr : rédacteur restreint » permet d’affecter des rubriques aux rédacteurs et modifie les droits afin qu’un rédacteur restreint (ou un administrateur restreint) voit dans l’espace privé uniquement les rubriques qui lui sont affectées (et leur (...)

  • Un retour d’expérience d’utilisation de Formidable

    26 octobre – commentaires

    Il s’agissait de créer un formulaire d’inscription à un évènement modérer les inscriptions dans le privé publier les inscriptions dans le public Nous avons discuté de cette présentation lors de l’apéro SPIP du 15 février 2016 à la Cantine (...)

  • Métas +

    3 décembre – 14 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

Ça spipe par là