Article PDF

Présentation d’un plugin fournissant une version PDF de l’article en cours

Présentation

Le plugin article PDF est encore développé sur la zone. Il est parfaitement fonctionnel mais possède peut être encore quelques bugs. Il permet de convertir votre article sous forme de fichier PDF. Vous pouvez alors à loisir l’enregistrer ou l’imprimer.

Le fichier pdf généré gère les liens html ainsi que les images de l’article.

Installation

L’installation se déroule ensuite comme pour tous les autres plugins, cf. http://www.spip.net/fr_article3396.html.

Une fois le plugin activé vous disposez d’une balise #ARTICLE_PDF à placer dans votre squelette sous la forme #ARTICLE_PDF{id_article}, et d’une balise #RUBRIQUE_PDF à placer sous la forme #RUBRIQUE_PDF{id_rubrique}.

Format PDF

La balise génère alors un bouton qui vous permet d’afficher la version au format pdf de l’article

Il est aussi possible d’ajouter, dans la partie head du squelette html d’article, <link rel="alternate" type="application/pdf" href="#URL_PAGE{article_pdf}|parametre_url{id_article,#ID_ARTICLE}" /> et/ou <link rel="alternate" type="application/pdf" href="#URL_PAGE{rubrique_pdf}|parametre_url{id_rubrique,#ID_RUBRIQUE}" />, afin de lier sémantiquement la version pdf à l’article en cours.

Nota : ce plugin nécessite d’avoir la bibliothèque image GD2 sur votre serveur (ce qui est souvent le cas).

installation SPIP 3

Sous SPIP 3, il est nécessaire d’installer la librairie FPDF dans le répertoire /lib/h5c1accba-fpdf17 (le créer au besoin si l’installation automatique échoue)

Limites

Le plugin a quelques limites, notamment le générateur de pdf, qui n’accepte pas de texte en utf-8 en entrée, ce qui nécessite une conversion préalable.

Personnalisation

Vous pouvez remplacer l’icône du bouton article pdf en remplaçant le fichier plugins/article_pdf/img_pack/article_pdf.png par le votre

Quelques icônes alternatives

Vous pouvez aussi adapter la page PDF générée, en modifiant des copies des squelettes d’origine article_pdf.html et rubrique_pdf.html dans votre propre dossier ./squelettes/.

Auteurs du plugin :


-  Paul Sanches
-  Aquinatus
-  Cédric Morin

Ajouts

Cette documentation est sommaire et pourrait être enrichie.

Discussion

184 discussions

  • 1
    Bertrand

    Merci pour ce plugin qui a le grand mérite de proposer une solution à ce problème récurrent qu’est la génération de fichier pdf. Je dois dire cependant que je trouve l’aspect des pdf générés assez perfectible : les marges sont mal maîtrisées, des blancs digracieux apparaissent au milieu des pages, le texte n’est pas justifié et puis il y a cette page de garde fort disgracieuse dont on ne comprend pas bien la raison.

    Bien sûr, vous réutilisez un programme existant, de sorte que c’est plutôt à l’auteur de ce dernier qu’il faudrait s’adresser. Deux questions cependant :

    — Ne serait-il pas préférable de passer par un serveur LaTeX pour générer du PDF ? La très grande qualité des pdf générés par LaTeX justifie peut-être le recours à cette technologie, même si elle est plus lourde à manipuler.

    — N’est-il pas possible avec la présente librairie de personnaliser un tant soit peu l’affichage des fichiers (via cfg par exemple) : activation de la pagination ou non, choix des polices, style des intertitres, présence ou non d’une page de garde, etc

    — Une troisième question : est-ce que l’affichage des notes de bas de page se fait correctement ?

    • mathbouq

      Le notes de bas de page sont transformées en notes de fin, et s’affichent donc correctement, mais en fin de document.

      Pour ce qui est de la page de garde, il est relativement facile de l’adapter à son goût, les fonctions de la librairie FPDF ne sont vraiment pas compliquées à appréhender. La construction de la page de garde se fait par la fonction function GenerateTitlePage() du fichier pdf/lib_pdf_spip.php. Pour supprimer cette page purement et simplement, il suffit de mettre les deux première lignes de la fonction BuildDocument() dans le même fichier en commentaire.

      Pour l’adapter à son goût, il suffit de regarder un petit peu dans la doc de FPDF, accessible en ligne et téléchargeable en PDF : http://www.fpdf.org/fr/download/doc...

      Pour ce qui est de rendre la présentation paramétrable, c’est certainement envisageable, il faut « juste » que quelqu’un se dévoue. Peut-être moi, dans quelques semaines, mais rien de garanti, d’autant que je ne connais pas encore cfg...

    Répondre à ce message

  • 5

    Bonjour,
    Merci pour votre plugin très pratique.

    Je vois un petit problème, pas très grave mais tout de même un peu embêtant.
    Selon sur quel programme ou PC (Word, OpenOffice,...) le texte a été saisi, le modèle d’apostrophe peut varier.
    Il semble que le plugin traduit correctement l’apostrophe verticale. Celle qui est un peu en biai (comme une virgule) est ignorée.

    Par exemple, dans le site de démonstration que vous donnez sur cette page (lien "le plugin en action), on tombe sur une page sur Séville. Si on en génère un pdf, en page 2, à la première ligne, on peut lire :

    Séville (Sevilla en espagnol) est une ville du sud de lEspagne

    l’apostrophe de « l’Espagne » a disparu (alors qu’elle est parfaitement visible sur le site).

    Un peu plus loin, ce problème disparait.
    C’est dû au fait que le signe employé pour l’apostrophe n’est plus le même...

    Il serait peut-être bon que le plugin prenne en compte les différents modèles d’apostrophes (il me semble).

    On ne peut se rendre compte de cette différence de signe qu’en regardant le texte dans l’éditeur de texte. en effet, Spip transforme les différents modèles d’apostrophe en apostrophe française (celle en biai), la seule correcte en typographie française.

    Personnellement, dans l’état actuel, ça m’oblige à vérifier les articles qu’on m’envoie et de remplacer, s’il y a lieu, tous les apostrophes fautives par celles reconnues par le plugin.
    Ce n’est pas très long, mais il faut tout de même le faire... ;)

    Merci encore :)

    • Quelle version de SPIP déja ?

    • j’utilise la version 1.9.2d.

    • mathbouq

      Bonjour,

      Tout d’abord, merci pour ce formidable plugin, facile à installer et à customiser. Il me reste encore quelques petits soucis à résoudre, mais c’est réellement un bonheur...

      J’ai le même problème qu’Elode avec les apostrophes, mais aussi avec un certain type de guillemets.

      En ce qui me concerne, l’apostrophe "en biais" est transformée en espace lors de la génération du PDF, alors que l’apostrophe "droite" est bien prise en compte.
      Pour ce qui est des guillemets, "cette version" est bien prise en compte, alors que “celle-ci” est remplacée par des espaces.

      J’ai essayé d’effectuer des remplacements dans le fichier article_pdf_mes_fonctions.php du type $trans["”"] = "\"" ; sans succès. De même avec $trans["\”"] = "\"" ;
      Dans les deux cas, le résultat reste le même : les caractères qui me posent problème sont remplacés par des espaces dans le PDF.

      Pour ma part, je ne peux pas faire le remplacement dans le texte source, dans la mesure où ces formats d’apostrophe et de guillemets sont imposés aux contributeurs, qui écrivent en Anglais, pour des lecteurs anglophones.

      Autre souci : j’utilise la fonction Découper en pages intégrée au Couteau Suisse. Aux endroits où sont insérés les indicateurs de découpe dans le texte (raccourci SPIP : ++++), un gros espace blanc est inséré dans le PDF entre les deux paragraphes. Environ 4 fois l’espace qu’il y a entre deux paragraphes dans le reste du texte. Est-ce le comportement normal ?

      J’avais auparavant modifié légèrement cette fonction du CS, en supprimant carrément le code HTML inséré par la découpe lors de l’affichage complet du texte. Mais même en rétablissant le fonctionnement originel du CS, j’ai toujours ce "trou" entre les paragraphes à l’endroit de la découpe.

      Par ailleurs, j’obtiens un texte aligné à gauche dans le PDF, alors qu’un commentaire de la fonction GenerateText() dans le fichier lib_pdf_spip.php signale un texte justifié. J’ai fait une tentative avec la fonction MultiCell de FPDF, mais sans succès pour l’instant : le texte est bien justifié, mais à chaque fois qu’il y a une balise HTML, le texte est renvoyé à la ligne.

      Enfin, je pense qu’il serait bien d’ajouter la globale $auteur, par défaut, en tête de la fonction GenerateTitlePage(). Et même d’ajouter le nom de l’auteur sur la page de garde, par la même occasion. Je peux m’en charger, éventuellement (j’ai un accès en écriture sur la zone).

    • mathbouq

      Je me réponds à moi-même, j’ai réussi à résoudre les problèmes les plus bloquants évoqués ci-dessus :

      • pour que les guillemets et apostrophes soient correctement pris en compte pour insertion dans le PDF, j’ai créé un filtre pdf_second_clean sur le modèle de pdf_first_clean dans article_pdf_mes_fonctions.php
        function pdf_second_clean($texte)
        	{
        			$trans = array();
        			$trans['&#176;'] = "°";
        			$trans["&#339;"] = "oe";
        			$trans["&#8211;"] = "-";
        			$trans["&#8216;"] = "‘";
        			$trans['&#8217;'] = "’";		
        			$trans['&#8220;'] = "“";
        			$trans['&#8221;'] = "”";
        			$trans["&#8230;"] = "...";
        			$trans["&#8364;"] = "Euros";
        			$trans["&ucirc;"] = "û";
        			$trans['->'] = '-»';
        			$trans['<-'] = '«-';
        			$trans['&nbsp;'] = ' ';
        			$texte = strtr($texte, $trans);
        	
        			return $texte;
        	}

        J’applique ce filtre après le filtre texte_script dans le squelette article_pdf.html. Sans entrer dans les détails, c’est après l’application de texte_script que les caractères problématiques sont rendus sous leur format HTML. J’ai ainsi[$texte= '(#TEXTE|pdf_first_clean|texte_script|pdf_second_clean)';] (et de même pour les autres balises concernées)

      • les espaces blancs à l’endroit des découpes de page du Couteau Suisse étaient produits par l’insertion d’un paragraphe vide (alors que j’ai pourtant supprimé toute insertion par mon Couteau Suisse à cet endroit).
        J’ai donc ajouté une ligne au début du filtre pdf_first_clean dans article_pdf_mes_fonctions.php, qui supprime les paragraphes vides :
        $texte = ereg_replace("<p class[^>]*></p>", "", $texte);
      • je sèche encore sur le moyen d’obtenir un texte justifié plutôt qu’aligné à gauche, mais c’est moins problématique que les éléments précédents...
    • Je précise que je suis loin d’être un spécialiste du PHP ou de FPDF, et que tout ceci est du bricolage (qui marche bien, jusqu’à présent :-)).

    Répondre à ce message

  • Pourriez-vous me guider ?

    je souhaite inclure les forums de l’article à l’impression PDF... je suppose que c’est possible, mais je ne vois pas bien par quel bout prendre le problème...

    Merci d’avance

    Répondre à ce message

  • 1

    Bonjour,

    c’est chouette, mais vraiment, il y a trop de blanc, toute la première page presque. C’est trop une incitation à gâcher du papier ... car un PDF, c’est aussi souvent un format qu’on va imprimer !

    Donc pour préserver nos arbres, nos forêts, leur vie et le climat, pour moins gâcher de papier, pourriez vous faire évoluer ce plugin vers une version ... « agréée Grenelle de l’environnement » ?

    Merci beaucoup !

    • FireWolf

      +1
      Existe-il des solution pour arriver à ça ? Ça serait tip top de voir cette 1re page se dégager. Uniquement le texte serait plus que suffisant.

    Répondre à ce message

  • 1

    Tout d’abord merci pour ce plugin.

    Depuis quelques années, j’utilise SPIP et la fonction de génération de PDF. Ici, avec ce nouveau plugin, certains PDF ne sont pas générés et une page blanche est le seul résultat obtenu.

    Dans spip.log, j’ai ce message d’erreur : "Erreur : filtre <b>« texte »</b> non défini | _principale (article_pdf.html)"

    J’ai bien essayé de modifier les filtres en conséquence mais sans résultat (après vide du cache etc).

    Si quelqu’un a une idée ou peut me donner un coup de main, je serai le plus heureux des hommes :-)

    Merci

    Spartakus

    • Salut,

      J’ai eu la meme galére que toi et j’ai réussi a régler cela en changant la ligne 44 du fichier article_pdf.html par :

      $copyright = ’[(#NOM_SITE_SPIP|pdf_first_clean|texte_script)]’ ;

      Voila en espérant que ca a pu t’aider ;)

      @+

    Répondre à ce message

  • Il n’y a pas possibilité d’adapter le plugin pour les brèves ?
    Sinon, au pire, d’en faire un similaire pour les brèves ?
    Merci beaucoup.

    Répondre à ce message

  • 2

    Spip 192c, dernier téléchargement ce jour, daté du 16/11/2007.

    L’activation du plugin génère des pages blanches pour tout, dans la partie privée (donc indépendamment de mes squelettes). Une idée de la raison ?

    Merci.

    • Bonjour,

      J’avais le même problème avec mon site en migration de 1.8 vers 1.9.2c.
      Le problème venait d’une fonction pdf_first_clean dans le fichier mes_fonctions.php. J’ai supprimé la fonction et le site est reparti.

      Alexis

    • Bien vu !
      Merci beaucoup.

    Répondre à ce message

  • Je voudrais joindre les images du porte folio dans le pdf fournis par le plugin

    Merci de vos reponses

    Répondre à ce message

  • Bonjour,

    Merci pour ce plugin, il est d’une grande utilité.
    Cependant, j’ai un problème. Les images insérées dans le contenu des articles ne sont pas générées dans le PDF. Il n’y a que le chemin de l’image qui apparait.

    Comment corriger ce problème ?

    Je précise que GD2 est installé et fonctionne (j’ai une autre page qui génère des miniatures en PHP et qui fonctionne très bien).

    J’ai SPIP 1.9.1.
    Dans la configuration de SPIP, dans la Méthode de fabrication des vignettes, je vois l’homme dans le hammac pour GD2.

    Merci de votre réponse.

    Répondre à ce message

  • 2

    Bonjour, au lieu d’associer cette option pdf à un squelette, j’ai préféré construire un modèle que j’appelle dans le corps des articles que je souhaite proposer en pdf : création d’un fichier pdf.html dans squelettes/modeles avec la mise en page et l’appel de la variable et balise <pdf|> dans corps des articles. Mais le modèle ne récupère par l’id_article !
    Quelqu’un a une idée ?
    Voici le code utilisé dans le fichier pdf.html :

    <BOUCLE_idarticle(ARTICLES){id_article}>
    <div style="border:1px solid #3399FF; width: 688px; vertical-align: middle; padding:5px; margin:auto; background-color:#DBE0FE">#ARTICLE_PDF{#ID_ARTICLE}<a href="spip.php?page=article_pdf&id_article=#ID_ARTICLE" title="pdf">Télécharger cet article en pdf</a></div>
    </BOUCLE_idarticle>
    • je ne comprends pas très bien ce que peux t’apporter un modèle, le fonctionnement en balise étant amha plus puissant.
      ceci dit essaie de regarder du côté de la balise #ENV elle te permettra peut être de récupérer quelques info de contexte qui je pense doivent te faire défaut

    • EN fait, s’il existe des balises à utiliser directement dans le corps de l’article, je veux bien que tu m’aides là-dessus parce que la document est assez laconique sur ce sujet. Je tiens à dire que ce plugin est génial et qu’il fonctionne parfaitement sur mon site. Le problème est que ce que j’ai cru comprendre c’est qu’on peut greffer cette fonction à un squelette. Mais si je ne veux pas qu’un article ait cette fonction greffée ou qu’un autre l’ait, il me faut plus de souplesse et notamment la possibilité d’inclure un modèle dans la page d’un article en particulier. C’est ce que je vise en créant un modèle pdf.html et donc une balise <pdf|> à insérer où je veux dans le corps de mon article.
      Ça n’avait pas bien l’air compliqué quand je me suis penché sur la question mais finalement j’ai perdu une journée. J’ai tout essayé, du logique et du beaucoup moins logique (l’exemple de code ci-dessus).
      Finalement, je ne comprends pas pourquoi ce code ne fonctionne pas
      <div>#ARTICLE_PDF{#ENV{id_article}}</div>
      J’ai essayé plein plein de choses, mais rien n’y fait. Par exemple, par rapport à cette ligne de code ci-dessus, j’ai tenté la balise dans l’article : <pdf|id_article=#ID_ARTICLE>
      La balise #ENV en tous cas, ne semble pas fonctionner comme je le voudrais.
      A mon avis, je trux est tout con comme d’hab, mais il me faut l’oeil affûté d’un expert...
      Merci à tous ceux qui liront.
      Laurent.

    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 :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom