[archive] spiPDF v0.1.0 : des contenus sur mesure en PDF

Une nouvelle version 0.2.0 du plugin spiPDF est disponible

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

Ce plugin génère des fichiers PDF à partir d’un squelette défini 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.

Le plugin utilise la classe HTML2PDF (qui elle même utilise grandement TCPDF. Vous pouvez vous rendre sur le site de HTML2PDF pour un aperçu des possibilités (notamment la page des exemples ).

Pré-requis

PHP 5 est requis ! (sérieusement, il y a encore des gens avec PHP4 ?!) pour un fonctionnement optimal. Cependant, vous pouvez télécharger séparément une version plus ancienne de HTML2PDF, compatible avec PHP4 et remplacer le répertoire.

Téléchargement

  • A télécharger sur la zone via SVN
  • Ou téléchargement du ZIP généré automatiquement toutes les heures.
    spiPDF v0.1.0

    Le plugin est relativement volumineux parce qu’il intègre un certain nombre de polices de caractères utilisées pour la génération des PDF

Utilisation

Pour utiliser ce plugin, outre son installation des plus classique (téléchargement, installation dans le répertoire plugins/ et activation via l’interface privée), une étape suffit.

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 utilisé 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.

Format, orientation des pages et autres subtilités

HTML2PDF, vous permet, via la balise <page> (voir le squelette spipdf_article.html pour l’exemple), de régler :

  • l’orientation : paysage « L », ou portrait « P »
  • le format : A4, A5, Letter
  • les marges

Vous trouverez plus d’informations sur le wiki de la librairie et plus particulièrement sur la section concernant la fameuse balise page

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 HTML2PDF. Dans ce cas, vous devriez avoir une erreur à la génération du PDF.

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

Note : actuellement testé avec pratiquement tous les raccourcis typographiques, il n’a pas été signalé d’incompatibilité entre les balises HTML générées par SPIP et HTML2PDF [1].

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 n’est pas géré.

Vous devrez palier à cette contrainte de positionnement en utilisant des tableaux imbriqués (snif !)

Encore une fois, toutes ces contraintes sont explicitées sur le site de HTML2PDF et sur son forum.

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');

Notes

[1Le forum de la librairie vous donnera plus d’informations sur les balises non supportées

Discussion

17 discussions

  • 1
    Alexmacapple

    Merci pour ce plugin. Je devais générer des pdf depuis des champs extra, ce qu’on ne pouvait pas faire avec article PDF. Cette librairie est vraiment superbe, ainsi que la squeletisation de la génération du pdf qui est énorme ! Fonctionne très bien sur la svn stable du jour SPIP 2.1.12 , donc je ne sais pas pourquoi le titre de l’article le place en archive. Un grand merci Yves.

    Répondre à ce message

  • 6

    Bonjour,

    je suis repassée à la version 1 du plugin, qui me permet d’afficher plus de 20 résultats à une boucle (avec la version 2, j’obtenais malheureusement une page blanche...).
    Tout fonctionne cette fois très bien...

    sauf pour les articles où j’ai intégré une balise type Y-a-t’il un moyen, un hack, quelque chose... pour demander d’ignorer ces balise et de ne pas afficher les jeux (ou mieux de faire en sorte qu’ils s’affichent ?).

    J’imagine que ça serait à rajouter dans spipdf.php. J’ai regardé le code, mais j’ai vite senti mes limites...

    • je rectifie le manque de signature, et j’en profite pour préciser que la balise qui pose souci est« jeu »

    • Bonjour,

      Le problème vient sans doute des expressions régulières que j’utilise pour nettoyer le code SPIP. Il faut les commenter une par une et voir le résultat.

      dans la fonction spidf_nettoyer_html, il faut commenter les lignes $html = preg_replace_callback en mettant 2 slash devant et voir ce que ça donne.

      Attention à bien avoir var_mode=calcul dans l’URL qui appelle le PDF.

      J’essayerais de regarder mais ce n’est pas facile à tester. Il s’agit d’une boucle sur des articles ?

    • je vais de tester votre solution, cela ne change pas le problème malheureusement

      exemple :
      http://www.ac-grenoble.fr/lycee/diois/Latin/spip.php?article4879

    • Vous avez commentez un par un les lignes concernés en testant à chaque fois ?

      La difficulté ne vient-elle pas plutôt des formulaires... ?!

    • jeu étant un formulaire, je pense que le problème est là... c’est pour ça au départ que je demandais s’il y a un moyen de faire en sorte que ce type de « formulaire » soit zappé...

    • Quoique... je dis peut-être une bêtise (je suis grippée), je ne sais pas si jeu est un formulaire ou pas, mais pour l’intégrer dans un article, je reporte un code type

      <jeu43>

      étonnement, je n’ai pas de souci avec d’autre code de ce genre, mais pour jeu, ça ne marche pas.

    Répondre à ce message

  • 1
    audwill

    Bonjour,

    Je suis en train de tester le plugin sur un site en local (mamp, php5, spip 2.1.10). ça marche globalement sur tous les articles, sauf sur un article dans lequel le rédacteur a rentré deux images à la suite dans le champ texte :

    <emb349|center>
    
    <emb350|center>

    Dans ce cas le pdf est vide, blanc. Si j’enlève l’une des deux images, le pdf s’affiche bien.

    Répondre à ce message

  • 6

    Bonjour,

    Avant tout merci pour le plugin qui me permet moi-aussi de résoudre les limitations de article-pdf avec une édition des auteurs.

    Mon problème est le suivant :
    je n’arrive pas à adresser une feuille de style en interne, style. Le programme bloque.

    	[(#REM) Les styles de spip,  il est possible d'utiliser sa propre feuille de style !]
    	[<link rel="stylesheet" href="(#CHEMIN{spip_style.css}|direction_css)" type="text/css" media="all" />]

    Idem quand je passe par le style interne à ma feuille d’édition, cela ne marche pas du fait que j’ai des images en référence :

    #ColContenu .tabbox ul.nav { padding:0; margin:0; height:25px; background:url(#CHEMIN{images/tabnav_bottom.gif}) repeat-x 0 bottom; width:100%; clear:both; float:none;}

    Avez vous une idée ?
    merci

    • Bonjour,

      Comment faites-vous appel à votre feuille de style ?

      Pour les images en background CSS, je n’ai pas testé... Je regarderais ce que ça donne....

      Avez-vous essayé avec la nouvelle version du plugin (voir lien au début de l’article) ?

    • Bonjour,

      Mon appel est le suivant : ;

              [<link rel="stylesheet" href="(#CHEMIN{css/auteur.css}|direction_css)" type="text/css" media="all" />]

      J’ai bien SQUELETTES/CSS/auteur.css

      j’ai même dupliqué CSS/auteur.css dans lib du plugin pour voir

    • J’ai inspecté le code un peu de mpdf.
      Je ne connais rien à cette librairie et je me sens incapable de debuguer. Mais là ou cela bloque tout c’est à ce niveau de lecture du fichier css :

      dans : function _get_file($path) de mpdf.php, vers la ligne 10214

      Quand on execute : $contents = file_get_contents($path) voila ce que l’on obtient en message d’erreur :

      igne 10216 (_get_file) : http://localhost/smart_afe/trunk/site/squelettes/css/auteur.css
      Warning: file_get_contents(http://localhost/smart_afe/trunk/site/squelettes/css/auteur.css) [function.file-get-contents]: failed to open stream: Une tentative de connexion a échoué car le parti connecté n'a pas répondu convenablement au-delà d'une certaine durée ou une connexion établie a échoué car l'hôte de connexion n'a pas répondu. in K:\xampp\htdocs\smart_afe\trunk\site\plugins\spipdf\lib\mpdf\mpdf.php on line 10219

      Mon fichier est à la bonne adresse !
      De plus il est vide dans cet exemple :

      /* quelques styles en plus */

      Je n’arrive pas à voir pourquoi !

      Merci

    • Je viens de trouver une piste.
      Plusieurs messages sur le net parlent de problèmes quant à l’interprétation en local de
      localhost. Ils proposent de replacer ce terme par 127.0.0.1

      je vais jeter un coup d’oeil sur cela.

    • Encore moi dsl,

      C’était cela.
      Avec localhost tout plante.
      J’ai donc rajouté en ligne 217 de _get_file (mdpf.php) :

              $path=str_replace('localhost','127.0.0.1',$path);

      Désormais, la ligne de code :
      $contents = @file_get_contents($path);
      ne semble plus planter à cause de la feuille de style.

      Manque plus que les images en background qui plantent encore.

    • Je pense que vous utilisez la nouvelle version du plugin. je réponds donc sous l’article en rapport avec la version

    Répondre à ce message

  • 1

    Je voudrais savoir s’il serait possible de prévoir un mode de fonctionnement où le fichier PDF est écrit sur le disque (dans « local/spipdf/nom-du-fichier.pdf » par exemple) en plus d’être envoyé au navigateur.

    En effet, je voudrais générer le PDF, puis l’envoyer avec le Facteur.

    Merci.

    • Bonjour,

      Oui, c’est possible sans trop de difficulté. Mais pour l’instant je voudrais déjà faire tester et finaliser la nouvelle version du plugin ;)

    Répondre à ce message

  • 1

    Bonjour,

    Merci pour ce plugin et la possibilité de faire notre squelette pour présenter notre contenu à notre façon, ce qui n’étais pas possible avec le plugin Article-PDF. Par contre ce dernier produisait du « vrai » pdf (on pouvait copier du texte à partir d’une sélection de texte) et moins volumineux. Si j’ai bien compris, SpiPDF produit du pdf contenant une image du texte (on ne peux copier que l’image, pas le texte d’une sélection) qui est plus lourde. Idéalement ton plugin produirait du « vrai » pdf aussi ... :-}

    Dans la version actuelle j’ai 2 difficultés :
    Voir le fichier

    • les listes faites il y a longtemps (maladroitement) avec - blabla ... au lieu de -* blabla... apparaissent avec une puce et des espaces excessifs. (et si il faut reprendre tout cela sur tous les articles, ça le fait pas non plus)
    • les notes de bas de page faites avec des liens comme [[Doumbia Bakary [Qualité de la participation de la société civile au Cadre stratégique de lutte contre la pauvreté (CSLP), NEPAD et accords de Cotonou ->http://penserpouragir.org/article.php3?id_article=66] ]](exemple de la 3e note de l’article) apparaissent surchargés.
    • Pour les listes à puce, je viens en effet de voir le souci. En attendant tu devrait peut-être utiliser le plugin « couteau suisse » qui intégre le plugin « belles puces » permettant de remplacer les puces graphiques par des ul/li

      Concernant les notes de bas de page. Je vais regarder s’il s’agit d’un problème de style.

      Une nouvelle version est en préparation et devrait sortir la semaine prochaine

    Répondre à ce message

  • 12

    Plugin du tonnerre, mais il faut vraiment trouver un moyen de gérer les images en float ...

    en attendant j’ai décider dans spipdf.php de supprimer toutes les images ... :/

    Vite une solution ...

    • Les images fonctionnent !? Je ne saisi pas où se situe le souci ? quand elles sont intégrées en ou en  ?

    • le texte passe par dessus les images .. la propriété float a l’air d’être reconnue mais mal gérée :

      je n’ai ce problème que pour #TEXTE

      pour une image en alignement float left (soit ) qui se trouve dans un #CHAPO là ca marche niquel, le texte ne passe pas par dessus, et s’aligne bien sur la droite de l’image...

      voir ci joint

    • le chapo par exemple, là les images en alignement |left fonctionne ..

    • OK... Le site a coupé mon commentaire et ma question...

      Les images sont intégrées en doc|left ou en img|left ?

    • dans #chapo : img|left => fonctionne

      dans #texte : img|left et img|right => ne fonctionne pas

    • OK, je vais jeter un oeil cette semaine ou la semaine prochaine... Quelle version de spip utilisez-vous ?

    • SPIP 2.0.10

      Merci .. je continue de chercher ...

    • Yves, je viens d’installer sur un hébergement la dernière version de spip, avec la dernière version de ton plugin (avec les squelettes dist).

      J’ai toujours les problèmes des images en flottement ..

    • Des nouvelles Yves ? Ou alors je fais quelque chose de travers ?

      Merci

    • Je viens seulement de regarder...

      Donc, le pb n’est pas facile à résoudre. HTML2PDF ne gère pas le float sur les divs. Il y a donc dans le plugin un hack pour remplacer le float sur les divs des images par un simple align=« left » ou align=« right » sur l’iage elle-même.

      Mais comme on le voit, ça ne fonctionne pas si l’image est à cheval sur plusieurs éléments

      Sur ton exemple dans le chapo ça fonctionne car le chapo ne contient que 1 paragraphe...

      Je continue à chercher une solution...

    • Comme je l’ai précisé à Nicolas, il semble que ça fonctionne correctement avec mPDF. J’essaye donc une utilisation de cette librairie...

    • ok merci, continue de nous tenir informé !

    Répondre à ce message

  • 2

    Bravo pour ce plugin qui m’a permis de mettre en place très rapidement la création d’un PDF à la volée !

    Parmi les manques dans le support des CSS, on ne peut pas mettre de background-color pour les <h1>, <h2>, etc....

    • Merci Nicolas. Je suis assez dépendant des librairies existantes de génération de PDF n’ayant franchement pas le temps de me pencher plus en avant dessus (et c’est vite touffu comme genre de librairie)

      Par contre, un problème important étant le placement des images, je suis entrain de tester dompdf et mpdf. Ce dernier fonctionne plus que correctement et gère bien les images !

      Je vais donc proposer à l’utilisateur de choisir entre les différentes librairies. Elles ont chacune leurs avantages et leurs inconvénients.

      Je testerais ensuite l’implémentation des background-color sur chacune

    • Super, merci pour la réponse !

    Répondre à ce message

  • 2
    freebsnet

    Bonjour,
    Dans la Revision 42379 le à , accent grave n’est pas codé correctement en UTF-8 remplacé par des ?
    de plus lorsqu’il est dans une cellule d’un tableau, ça provoque un débordement du tableau hors de la page du PDF.

    Répondre à ce message

  • 7

    super,
    c’est du tonnerre !

    • Une nouvelle version de TCPDF est sortie recement, veuillez mettre le plugin a jour, et ajouter la direction RTL pour la prise en charge des langue qui s’ecrivent de droite a gauche,
      Bon courage

    • Bonjour,

      Je dois répondre « oui chef, tout de suite » ?

      Le plugin n’utilise pas TCPDF directement mais HTML2PDF. Il faut donc attendre une mise à jour de HTML2PDF

    • est ce que j’ai dis quelque chose de pas bien pour que tu me repond d’une facon pas tt a fait poli, j’ai personnelement change la version du TCPDF du plugin par la nouvelle version et ca marche, donc puisque je ne suis pas pro, je crois bien que c’est facile pour TOI.

    • Je ne sais pas pourquoi dans un grand nombre de plugin on oublie ou en ne donne pas l’importance au langues RTL.

    • bonjour,

      lorsqu’on utilise un impératif (« veuillez mettre à jour le plugin ») c’ets qu’on suppose que la personne est à vos ordre.

      ne vous étonnez donc pas de la réponse de Yves.

    • Mes excuses alors a vous Tous, c’etais avec une bonne intention, c’etais pas un ordre, et sans aucune rancune, alors je reconnais mon erreur, EXCUSEZ MOI et merci encore pour le plugin

    • Y a pas de mal. Je vais regarder ce qu’il en est pour TCPDF.

    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