Articles SPIP au format PDF Nouvelle version

All contributions published for previous SPIP versions

Cette contribution est largement inspirée de celle-ci : Génération améliorée de fichiers PDF
et de celle-ci :Génération de PDF pour SPIP - Drop Zone City

Je vous invite donc à lire ces contributions avant la mienne.

Installation

Vous trouverez en pièce-jointe (prenez l’archive intitulée PDF Nouvelle Version), les fichiers nécessaires à la génération des articles au format PDF.
N’oubliez pas de créer un dossier nommé : _article_PDF dans le répertoire IMG et de lui attribuer les permissions à 777 (comme vous l’aviez fait lors de l’installation de SPIP pour le répertoire IMG par exemple).

Ensuite, vous installez les fichiers joints à la racine de votre site SPIP.

Attention : Si vous utilisez déjà un fichier mes _fonctions.php3, recopiez le code contenu dans notre fichier mes_fonctions.php3 entre les balises <?php et ?> dans votre fichier mes_fonctions.php3.

Puis, faîtes un lien dans votre squelette article.html vers article_pdf.php3 comme ceci :

<a href="article_pdf.php3?id_article=#ID_ARTICLE" target="_blank">Voir au format PDF</a>

Démo articles SPIP au format PDF

Voici un récapitulatif des fonctionnalités ajoutées aux PDF :

-  Les PDF se régénèrent automatiquement quand vous modifiez un article, alors qu’avec les contrib. proposées vous devez effacer à la main les pdf dans votre dossier IMG/_article_PDF à chaque fois que vous modifiez un article.

-  Le problème de titre trop long qui était coupé et donc qui ne revenait pas à la ligne a été corrigé.

-  Amélioration de la génération de certains caractères spéciaux.

-  Les logos d’articles apparaissent correctement, par contre il faut que je règle le problème de liens sur les logos, pour l’instant, j’ai tout simplement retiré les liens qui finalement ne servent à rien.

-  Les images insérées dans les articles apparaissent correctement.

-  Cette contribution est compatible avec la contribution : Découper un article en plusieurs pages et lui ajouter un sommaire, ainsi les <hr> générés n’apparaissent pas dans le pdf.

-  Les fichiers au format GIF sont gérés de 2 façons. Soit en pur PHP et le résultat n’est pas terrible bien qu’il reste utilisable. Soit, avec utilisation de la librairie GD dans une version capable de manipuler les GIF, et la, vous aurez un resultat parfait.

-  Les fichiers PNG avec couche Alpha sont gérés mais le fichier PNG généré dans le PDF aura forcément un fond blanc ### On peut peut être ressortir la couleur dans une variable en tête de fichier si qq1 veut pouvoir la changer facilement ###

-  Nous utilisons la dernière version de FPDF qui est à l’heure où parait cet article la 1.53. Pour plus d’infos sur l’historique des versions, il faut se rendre ici.

Un PDF simplifié sans page de garde

Vous trouverez aussi en pièce-jointe le fichier permettant de générer un article au format PDF, de présentation plus simple, sans page de garde.

Installation :

Pour cela, vous installez comme décrit précédemment le “package PDF Nouvelle Version”, puis il suffit de remplacer le fichier lib_pdf_spip.php qui se situe
dans le répertoire : lib/class_pdf
par celui fourni en pièce jointe (dont le titre du zip est PDF simple sans page de garde).

Vous obtiendrez alors un fichier simple sans page de garde, avec un footer (pied de page) où l’on retrouve l’auteur, le nombre de pages, la date de publication et le nom du site.

Vous pourrez facilement modifier la taille et le type de police et les espaces entre chaque balise surtitre, titre sous-titre et texte.

Exemple :

//Titre
$this->SetFont(’helvetica’,’B’,12);
$this->WriteHTML($titre);
$this->Ln(12);

-  SetFont permet de définir la police B=Gras 12=Taille (comme d’habitude)
-  WriteHTML sert à transformer les balises html en codes interprétables par le PDF
-  Ln(12) = Effectue un saut de ligne, et 12 = amplitude du saut de ligne.

Pour plus d’infos, aller sur http://www.fpdf.org

Pour aller plus loin : ajouter des champs extra dans la génération des PDF

Pour ce qui est des champs extras, il faut les déclarer dans le fichier : lib_pdf_spip.php comme ceci :

ligne 137 remplacer : global $texte, $chapo, $ps, $notes ; par : global $texte, $chapo, $extra, $ps, $notes ;

ligne 146 environ, ajoutez en dessous de ce code :

//Texte - justifie $this->SetFont('helvetica','',10) ; $this->WriteHTML($texte) ; $this->Ln(12) ;

le code suivant :

if ($extra) // extra $this->SetFont('helvetica','',10) ; $this->WriteHTML($extra) ; $this->Ln(12) ; 

Dans cet exemple, les champs extra apparaitront dans vos pdf sous le texte de l’article et avant le Post-scriptum de l’article.
Vous pouvez donc positionner le code ci-dessous ailleurs, avant le texte de l’article, avant le chapo, après le PS...

et dans article_pdf.html : ligne 11 : insérez en dessous de :

$conf_nom_site = "[(#NOM_SITE_SPIP|pdf_first_clean)]" ;

Les champs extras que vous voulez faire apparaitre, ici un exemple avec 2 champs extra (Mission, Competences) :

$extra = "Missions : "."[(#EXTRA|Mission|pdf_first_clean)]"."
"."Compétences : "."[(#EXTRA|Competences|pdf_first_clean)] ;

Vous ajoutez ainsi autant de champs extra que vous le souhaitez.

Pour plus d’infos sur les champs extra, allez dans la partie privé de spip-contrib.net et faites une recherche sur extra, vous trouverez toute la doc sur les champs extra et leur utilisation.

Voilà, je crois que je n’ai rien oublié, à part vous dire que cette contribution n’est qu’une collecte d’infos glanées sur spip-contrib et ses forums.
Donc je ne suis qu’un assembleur de ce que j’ai trouvé et non le créateur (juste des petits bouts ici et là). Merci à Chag qui a complété cette contrib. en améliorant la gestion des images, des tableaux et en intégrant la dernière version de FPDF.

Intégration des images dans les PDF grâce à la librairie GD

Commençons par rendre à César ce qui appartient à César. Ces modifications sont inspirées de ce commentaire.Cette librairie de manipulation d’images permet d’améliorer la qualité de certaines images intégrées dans les PDF. Les formats de fichiers concernés sont :

-  GIF (Graphics Interchange Format). Ce format d’image était soumis à licence. Afin de ne pas risquer de poursuites et pour ne pas payer, la librairie GD ne manipulait plus les fichiers GIF entre sa version 1.6.0 (correspondant à la date à laquelle UNISYS a commencé à vouloir faire payer les utilisateurs) et la version 2.0.28 (date à laquelle son algorithme principal est passé dans le domaine public). L’avantage de la librairie GD est qu’elle manipule très bien les images au format GIF. Pour savoir si vous pouvez l’utiliser, utilisez la commande <?PHP phpinfo(); ?>dans une page. Vous devriez obtenir plusieurs rubriques dont une qui concerne GD et qui pourrait ressembler à ca :

GD Support enabled
GD Version bundled (2.0.28 compatible)
FreeType Support enabled
FreeType Linkage with freetype
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled

Il faut au moins que le support des GIF en lecture soit possible pour pouvoir utiliser la librairie GD.

Que ce soit le cas ou pas, notre modification pourra inclure dans le fichier PDF une image au format GIF. Mais elle sera plus belle avec l’utilisation de GD :)

-  PNG (Portable Network Graphics) : Quand UNISYS a commencé à vouloir faire payer des licences pour le format GIF, le format PNG a émmergé. La librairie FPDF utilisée pour créer les PDF de cette contribution sait déjà gérer les fichier PNG. Mais pas les PNG avec couche alpha. Pour résumer, la couche Alpha, c’est une méthode de transparence sur les images qui permet d’avoir des parties plus ou moins transparentes. Notre modification dans la librairie permet de gérer les fichiers PNG avec couche Alpha. le fichier sera obligatoirement replacé sur un fond blanc.

Même si vous n’avez pas l’impression/l’intention d’utiliser d’images PNG avec canal alpha, sachez par exemple que, si vous ajoutez un document PDF à un article, son icône est un PNG avec canal Alpha.

Sur l’image suivante, vous pouvez comparer 2 captures d’écran de PDF générés à partir de SPIP. Le premier ne gère pas correctement le canal alpha. Le second, si.

Chag http://www.gaiaservice.fr

Paul http://www.netdeveloppeur.com

En pièces-jointes se trouvent 3 archives, utilisez celle intitulée : PDF Nouvelle Version, si elle ne fonctionne pas chez vous, testez celle intitulée PDF Ancienne Version.

updated on 11 February 2007

Discussion

32 discussions

  • 4

    Bonjour,

    Merci pour cette version simplissime tant à installer qu’à utiliser.

    Je voulais juste signaler deux bugs(?)

    • ici mes liens internes http://www.buscasalsa.com/mot.php3?id_mot=88 deviennent dans le pdf deviennent http://www.buscasalsa.com/IMG/_article_PDF/mot.php3?id_mot=88
    • et la table n’est pas lisible après transformation en pdf

    N’étant pas spécialiste ni de php ni de pdf, je ne vois pas comment corriger cela simplement...

    @+

    • Salut,

      Concernant le problème des url internes, il suffit, en SPIP 1.8.2, de remplacer dans le fichier article_pdf.html la ligne :

      [$texte= "(#TEXTE|pdf_first_clean)";]

      par

      [$texte= "(#TEXTE|liens_absolus|pdf_first_clean)";]

      En SPIP 1.7, il faut ajouter ce filtre dans mes_fonctions.php3 (c’est donc à faire...)

      Concernant ton problème de tableau, utilises-tu les raccourcis typographiques de SPIP ou tu mets du html ?

      Paul

    • En fait ça ne fonctionne plus dès que l’on utilise les puces de spip...

    • Je vais corriger pour les liens.

      Par contre pour les tableaux c’est bizarre car je n’utilise que du code spip, et pas de puces...

      C’est le cas pour tous les articles de cette rubrique

      En particulier pour cet exemple le tableau est renvoyé page suivante, et la police de caractère est trop petite.

      Pour info, voici le code source de la partie texte de cet article :

      blablabla<br />
      blablabla<br />
      blablabla
      
      Blablablabal
      
      | {{Original}} | {{Traduction}} |
      |   |   |
      | Algunos me creían muerto
      _ Pero que va
      _ Aquí estoy
      _ Ya yo llegué | Certain me croyaient mort,
      _ Il n'en est rien
      _ Je suis là,
      _ Je suis arrivé. |
      |   |   |
      | Que me trancaron con siete llaves
      _ Allí les solté mi bomba
      _ Que me trancaron con siete candados
      _ Y allí les formé un rumbón
      _ Porque la rumba estaba conmigo
      _ Para aliviarme las penas
      _ Con su hermanita la plena
      _ Y su primo el guaguancó
      _ Algunos me creían muerto
      _ Pero que va
      _ Aquí estoy ya yo llegué
      _ Para ponerte a gozar mi rumba | Ils m'ont entravé par 7 clefs
      _ Et je leur ai laché ma Bomba[[ici au sens du style musical voir [ici->rub23] ]]
      _ Ils m'ont entravé par 7 cadenas
      _ Et je leur ait monté une fête
      _ Car la Rumba était avec moi
      _ Pour me soulager de mes peines
      _ Avec sa sœur la Pléna[[ [ici aussi->rub23] ]]
      _ Et son cousin le Guaguanco
      _ Certain me croyaient mort,
      _ Il n'en est rien
      _ Je suis là, je suis arrivé.
      _ Pour te faire vibrer avec ma rumba |
      
      ...

      en tout cas, merci encore pour la contrib, et pour le truc du filtre !

    • le filtre fonctionne super.

      Pour la table, j’ai cur comprendre en regardant le code que les TAG à l’intérieurs des cellules d’une table ne sont pas traités...

      Du coup, les saut de paragraphes ou de ligne ne sont pas traité, et l’effet obtenu quand il y a trop de texte dans une cellule est une taille de police de 1.

      @+

    Reply to this message

  • 4
    Francesco

    salut,
    j’ai installé le contrib comme d’instructions mais j’ai des problémes avec l’exportation des images gif.
    Quelque fois apparait ces messages:

    FPDF error: Image file has no extension and no type was specified:
    FPDF error: GIF parser : unable to open file http://www.craniosacrale.it/img/sistema/fig1.6.gif

    Tu peux m’epliquer la raison?

    Merci,
    Francesco

    • Yop,

      toujours avec les memes images ?
      il n’y a pas un probleme de droits ?
      les fichiers ont bien la bonne extension (gif en l’occurrence) ?
      les extensions des fichiers sont elles en minuscule, majuscule, mixte ?

      Chag

    • salut chag,

      le dossier _article_PDF a les permissions à 777

      le noms sont tous minuscules

      j’ai exporté encore les images en .jpg et changé le nom plus simplement (a, b, c...) mais le problème persiste:

      FPDF error: Image file has no extension and no type was specified:

      Peut-etre qui’il ya un limite au nombre des images dans le document (ma page a 27 images..)
      Merçi encore pour ton aide,....

    • Tu peux nous donner le lien vers un article, pour qu’on puisse tester.

    • l’url est
      http://www.craniosacrale.it/Biodinamica-craniosacrale

      (le site est en italkien...cliquez sur » salva in formato pdf)...merci encore..

    Reply to this message

  • 4

    Ola Anton,

    Quelle version de Acrobat ?

    Chag

    • Adobe 6.03. 30

    • Il y a beaucoup de problemes avec IE et le plugin Acrobat. peux tu essayer avec la derniere version de Acrobat stp ?

      Chag

    • Je voudrai être plus clair

      le problème se gère de la manière

      1. Clik on article pour obtenir la version PDF
      2. Le PDF se gère bien sur une fenêtre que emerge
      3. Je ferme cette nouvelle fenêtre e ....

      Ploff

      4. Le IE demande de se fermer et on ne peux continuer

      Pour tant le problème n’existe pas en tant on ne ferme pas la fenêtre nouvelle

    • Tout solutionné,

      Apres avoir installé la version 7.0.3 de Acrobat Reader.

      Merci beacoup, Chag

    Reply to this message

  • Ola Chag, (je ne suis francophone mais je comprends)

    J’ai une problème aprés l’instalation. Le IE (6.02... e DirectX 9.1) Explorer se ferme aprés la production de le PDF (sur la fenêtre de creation de PDF). Avec Firefox tout va bien. Non soulement por moi mais por diferents visiteurs

    Parce que IE ait des problemes avec

    Archivo : pdf.ocx

    Le même success on

    http://paul.1formatik.com/emploi/

    et
    http://www.gaiaservice.fr/rubrique.php3?id_rubrique=5

    Aucune solution? parce que si non on est possible l’utiliser pour mes webs

    Reply to this message

  • 1

    Bonjour,

    Moi j’ai un problème avec les caractères spéciaux, par exemple “«” est remplacé par “«”

    De plus j’ai parfois des citations en arabe dans mes articles et elles ne s’affichent pas correctement. Par exemple :


    لابد من شكوى إلى ذي مروءة يواسيك أو يسليك أو يتوجع

    (qui veut dire : “C’est à un esprit chevaleresque que la plainte doit être adressée, il te réconfortera, te soulagera ou en souffrira”)

    s’affiche :
    D’(/ EF 4CHI %DI 0J E1H!) JH’3JC #H J3DJC #H J*H,9

    Enfin quand je met la référence à une note je la met en exposant entre des balise “sup” comme 1 et dans le PDF elles ne s’affichent pas en exposant.

    Voila, je ne sais pas comment corriger ce problème, si vous avez une idée...

    Reply to this message

  • 1

    Comme je trouve que la puce image de SPIP est bien moche dans le PDF, et en plus mal alignée sur la marge gauche, je l’ai remplacé par un simple tiret en ajoutant une ligne dans mes_fonctions.php3 à la fonction pdf_first_clean :

    $texte= str_replace(“<img class=’spip_puce’ src=’puce.gif’ alt=’-’ border=’0’>”, “–”, $texte);

    • Paul Sanches

      Tu as bien fait, il faut que j’améliore aussi cet affichage de puce.

      @+

      Paul

    Reply to this message

  • 2

    Je viens d’installer cela sur mon propre site et tout d’abord, merci car cela fonctionne fort bien. Mais, car il y a toujours un mais, je rencontre le problème suivant :
    Je me sers de la balise

    disponible dans les dernières versions de Spip et pour tous les textes figurant entre ces deux balises, le pdf généré ne contient aucun saut de ligne. Cela est d’autant plus gênant qu’il s’agit de poèmes. J’aiédité le fichier “lib_pdf_spip.php” mais je reconnais etre un peu perdu pour régler ce problème. Quelqu’un a-t-il une idée de la solution ?
    D’avance merci.

    • Oups. La balise en question n’apparait pas dans mon précédent message.
      Il s’agit donc de la balise “poesie”.

    • Oups. La balise en question n’apparait pas dans mon précédent message.
      Il s’agit donc de la balise “poesie”.

    Reply to this message

  • 6

    J’ai essayé le script qui a fonctionné du premier coup :-) Un regret : j’utilise de manière intensive les notes de bas de page, et cette fonctionnalité ne semble pas très bien prise en charge. Comme dans la version HTML, elles sont affichées sous la forme d’un lien, mais ce lien n’affiche pas la note correspondante, il ouvre une nouvelle instance d’Acrobat Reader ou du navigateur (avec erreur 404 page non trouvée). Egalement la gestion des tableaux est un peu brutale quand ils contiennent beaucoup de texte (réduction de la police de caractères pour que le texte de la cellule tienne sur une seule ligne).

    Ceci dit globalement c’est un script vraiment très utile, merci de l’avoir mis à disposition.

    • Salut,

      merci pour les commentaires, je m’occupe de ce PB de notes cette semaine.

    • J’ai regardé le pb de notes, elles s’affichent bien mais le lien est faux, on peut supprimer le lien comme ça plus d’erreur.
      Les notes apparaitront normallement mais il n’y aura plus de liens de notes dans le pdf ce qui serait plus logique.

      Est-ce que cette soluce te conviendrait ?

    • Oui ca me semble très bien, ce serait finalement plus lisible si les liens de notes étaient tout simplement désactivés.

    • Pour pouvoir désactiver les liens des notes dans la génération des pdf, il suffit d’ajouter les 2 lignes ci-dessous dans le fichier mes_fonctions dans la fonction : “pdf_first_clean” :

      $texte = ereg_replace("#nh1", "", $texte);
      $texte = ereg_replace("#nb1", "", $texte);

      A ajouter par exemple après la ligne :

      $texte = ereg_replace("\"", "\\\"", $texte);
    • J’ai essayé ca marche mais seulement pour la 1ere note de bas de page. Les autres sont conservées.

    • Oui excuse-moi, j’ai répondu un peu précipitement et n’ai pris en compte que la première note de bas de page.
      Voici la ligne à ajouter dans mes_fonctions.php3 :

      $texte = ereg_replace("#n(b|h)[0-9]+", "", $texte);

      @+

      Paul

    Reply to this message

  • C super mais il y a quand même un problème. Il ne comprend pas les retrait. En effet, j’utilise zEditor sur mon site SPIP et il met du code HTML. Quand je gènere le PDF, il ne met pas les retraits

    Reply to this message

  • 3

    J’ai essaye et tres sympa merci.

    Mais etrangement je rencontre ce probleme : mes images JPG et GIF passent bien mais pas celles au format PNG (qui me plantent carrement le processus de creation du PDF)

    Quelqu’un a-t-il aussi rencontre ce probleme ?

    • François Coulier

      Oui, pareil, j’ai un message “FPDF error: Alpha channel not supported: IMG/rubon0.png”.

      Comme j’ai beaucoup d’image en png, ça pose me pose effectivment un problème...

      François

    • François Coulier

      On ne lit jamais assez...

      Dans la contrib Génération améliorée de fichiers PDF il est dit clairement que le canal alpha des png n’est pas supporté.

      Au temps pour moi.

      Mais j’ai aussi cette erreur là:

      “FPDF error: Interlacing not supported: IMG/rtk.png”.

      L’interlacing des png n’est pas supporté non plus??

      François

    • Regarder la doc ici : http://www.fpdf.org/fr/doc/image.htm pour les formats supportés.

      On a ajouté le gif, par rapport à ce qui est dit dans cette doc.

      @+
      Paul Sanches

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom