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.
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');
Discussions par date d’activité
17 discussions
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.
Merci !
Il est noté « archive » car il y a une version plus récente :
http://www.spip-contrib.net/spiPDF-v0-2-0-generer-des-contenus-sur-mesure-en-PDF
Répondre à ce message
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
é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
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 :
Dans ce cas le pdf est vide, blanc. Si j’enlève l’une des deux images, le pdf s’affiche bien.
(vieux message mais je réponds quand même)
Idem, ça doit-être un souci avec les regexp (voir la version 2)
Répondre à ce message
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.
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 :
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 : ;
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 :
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) :
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
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
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
- 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)[[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
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
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
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.
Je vais regarder ça
Si vous êtes sur Windows, voici peut-être l’explication :
http://www.yaronet.com/en/posts.php?s=136527
Répondre à ce message
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 :
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 : |