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
argh je suis en 2.1.2 et j’ai une erreure
Parse error : syntax error, unexpected ’’ in /homepages/43/d347159104/htdocs/plugins/auto/spipdf/spipdf.php on line 132
je suis chez 1and1 en hebergement mutualise.
une idee de ce qui plante ?
Il me faut plus d’infos. au minimum :
- la version de PHP
- ce que tu as à la ligne 132 de spipdf.php
Et éventuellement :
- le type de serveur
- est-ce que tu utilises le squelette de base
- est-ce que l’erreur se produit avec un article simple ou complexe avec plein de raccourci typographique
Répondre à ce message
bonjour,
pour les notes de bas de page fonctionnent je suis obliger de renommer l’attribut id=’xyz’ en name=’xyz" dans les balises
<a>
pour que la navigation dans le pdf soit possible, est-ce normal ?html2pdf ou tcpdf ne supporte pas l’attribut id= ?
modifications que j’ai faite dans spipdf_article.html
Répondre à ce message
Bonjour,
et merci pour ce plugin !
Testé avec SPIP 2.1.2 sur hébergement OVH mutualisé, PHP5. Avec le squelette par défaut du plugin.
La génération du pdf d’un article fonctionne mais il y a certains caractères spéciaux qui s’affichent mal dans le pdf comme par exemple :
- les apostrophes (le pdf affiche par exemple « aujourd’hui »),
- les tirets dans une phrase (qui s’affichent « – »)
- le œ (qui s’affiche « œuvre »)
- les points de suite (qui s’affichent « … »)
En notant tout ça je me rends compte que dans le chapeau y’a une apostrophe qui passe bien, du coup ces problèmes de caractères spéciaux apparaissent peut-être juste dans le texte.
Et dernier truc, les notes de bas de page semblent superposées (cf capture ci-joint).
Comment est-ce que je peux corriger ça ?
j’ai mal codé mon message du coup les caractères spéciaux html s’affichent bien ici :)
mais il fallait comprendre que les caractères spéciaux suivants s’affichent mal, c-à-d tel quel, dans le pdf généré :
bonjour,
j’ai aussi galéré avec les caractères spéciaux en iso-8859-15, j’ai remarqhé que spip ne les transforme pas en entité html ou en référence numérique, pour cela j’ai modifié le fichier spipdf.php en ajoutant ceci :
ensuite les valeurs de la variable $trans qui sont encadrées par des doubles quote, je les ai remplacé par des simples quote. ce qui donne cette liste de variables à étendre au besoin.
Merci pour vos retours (Je n’avais pas recu de mail automatique quand audwill à posté son message...)
Je vais ajouter les caractères à échapper. Pour les notes de bas de page, il faut ajouter un style.
J’ai prévu de fournir un squelette par défaut plus « joli » et faire enfin fonctionner la génération en UTF-8. Mais je manque un peu de temps... La semaine prochaine je pense.
bonjour Yves
faut aussi mettre dans ton modèle le filtre |abs_ul sur les balises #DESCRIPTIF, #CHAPO, #TEXTE, etc .... sinon le raccourcis typo
[->artX]
renvoie une url relative et non une absolue, ce qui au niveau du pdf donne des url inexploitables.OK, c’est noté
Répondre à ce message
Bonjour,
Merci pour ce plugin fort utile.
J’ai de mon coté un soucis si l’article contient des images :
ERREUR n°6
Fichier : ..../www/spip_dev/plugins/auto/spipdf/html2pdf/html2pdf.class.php
Ligne : 2309
Impossible de charger l’image /spip/IMG/image/Brest_Au_Quotidien/CLic.jpg
Cordialement,
// Config serveur
chez OVH / mutu 720 -----------------------------------------
System : Linux web248.720.ha.ovh.net 2.6.32.7-mutu-grs-ipv4-32 #2
PHP Version 5.2.13
pdf
PDF Support enabled
PDFlib GmbH Version 4.0.2
Bonjour,
D’après l’erreur, je vois que le plugin est dans spip_dev/plugins et que l’image est cherchée dans spip/IMG/image/
Votre site est dans un sous répertoire spip_dev/ ou spip/ ?
Autre chose à regarder, je n’ai pas testé mon plugin via l’installation automatique dans le répertoire plugins/auto. Mais je ne pense pas que ça pose pb.
++ Yves
Bonjour Yves,
Effectivement j’avais pas noté la chose.
Je teste sur ../spip_dev et j’ai manifestement de l’url abolu (menant sur ../spip le site en production) qui traine qql part (lié config de fckeditor). Bref...
je vais revoir/modifier cela .
merci et désolé d’avoir poste sans regarder...
Suite au message que j’ai précédent posté :
1. j’ai bien remis l’image dans le IMG/ du site en test. Donc le chemin est « standard »
2. je n’ai gardé que l’attribut src (pas de border, width, etc....). L’image fait 86 ko et 350 x 260 pixels : (ni gros poids de fichier / ni grosse définition)
3. J’ai déplacé le plugin dans /plugins et non plus plugins/auto (à tout hasard...)
4. testé sans l’image (pour vérifier... ) : le pdf est généré
J’ai toujours l’erreur No6
ERREUR n°6
Fichier : .../www/spip_dev/plugins/spipdf/html2pdf/html2pdf.class.php
Ligne : 2309
Impossible de charger l’image /spip_dev/IMG/image/Brest_Au_Quotidien/CLic.jpg
=> Qui se traduit au 2e chargement de la page par un message d’Acrobat (en pièce jointe)
=> html2pdf.class.php / Ligne 2309 : ne semble pas capter les dimensions de l’image ?
Ps : pas encore testé ce qui est dit pour config UTF-8, je ferais suivre...
Est-ce que vous utilisez le squelette du plugin ou un squelette perso ?
Votre image est intégrée via SPIP ou via une autre voie : html, fckeditor... ?
Pour ce qui est de l’UTF-8, merci de tester mais je pense qu’il y a vraiment un problème de ce côté.
Je vais me pencher sur quelques optimisations d’ici quelques jours.
- J’utilise le squelette (non modifié) du plugin pour générer le pdf
- L’image a été intégré initialement via fckeditor.
Après simplification du code manuellement (suppression des attributs qui pourraient poser pb ds la balise img), il reste :
img alt=« » src=« IMG/image/Brest_Au_Quotidien/CLic.jpg »
Dès que j’ai testé l’UTF-8 je fais retour.
Merci ! :)
Répondre à ce message
il existe un moyen simple « d’échapper » le code html qui n’est pas bien géré par le plugin afin qu’il n’apparaisse pas...
regardez du coté des anciens plugins PDF archivés ou dans les vieux articles parlant de pdf, quelqu’un a écrit des filtres spip d’échappement de bcp de codes html, c’était peut etre J. Pyrat... de mémoire
Bonjour,
J’ai essayé ce plugin... sans succès.
Le fichier .pdf n’est pas généré correctement et rien ne s’ouvre.
Voir ici.
Cordialement,
KMk.
Bonjour,
Vous êtes passé en UTF-8, mais j’ai pu tester quand vous étiez en ISO
Ce n’est pas lié au serveur ou à la version de PHP mais à du code HTML mal formé et non géré par la bibliothèque. Il y a d’ailleurs une erreur explicite :
Avez-vous au moins essayé avec un article simple et avec le squelette livré ? Parceque cet article est un peu « tordu » http://laglaneuse.info/spip.php?article29#pdf ;)
Je ne dis pas que ça ne devrait pas fonctionner mais il faut y aller progressivement.
Par contre, en UTF-8, ça ne fonctionne pas du tout... Il suffit d’ouvrir le fichier PDF généré pour voir l’erreur PHP. Ca rejoint donc ce que je dis au premier paragraphe... Je vais finir par trouver...
Bonjour,
Hum... en effet, l’article en question me permet de tester les codes de spip pour le .css .
C’est ici.
Avec la même impossibilité de générer le .pdf.
Une idée ??
Cordialement,
KMk.
Repassez le plugin en ISO dans spipdf.php. Même si votre charset d’origine est UTF-8, le plugin se chargera de convertir en ISO. Le temps de trouver ce qui cloche (j’ai déjà quelques pistes). C’est un bug qui se produit de manière erratique et donc pas facile à résoudre.
Concernant votre article de test, il doit juste y avoir quelques subtilités non gérées car le plugin gère déjà pas mal de chose. Voici un exemple :
http://www.grafactory.net/devel/spip/spip.php?article3
Vous pouvez customiser l’affichage du PDF simplement avec HTML et CSS. (voir spipdf_article.html).
Cordialement,
Bonjour,
OK, avec l’article tout simple, cela fonctionne. Merci pour cette accompagnement !
Cordialement,
KMk.
Répondre à ce message
Ce plugin est excellent, bravo.
Je suis en train de tester les limites (en poids) des documents que l’on peut intégrer au PDF.
Merci ! Tenez moi au courant de vos tests.
Pas de problème : )
J’apporterai des liens sur le forum.
Répondre à ce message
Le plugin échappe déjà la plupart du code HTML non géré par HTML2PDF. Pour ça, j’ai justement consulté l’existant.
J’ai également ajouté des éléments qui n’étaient pas géré, produits par des raccourcis typographiques, et qu’ils ne suffisaient pas juste d’échapper. Par exemple, la balise
pour les légendes de tableau ou les balisesCe que je veux donc dire, c’est que je n’ai pas testé TOUTES les balises HTML existantes (http://www.w3.org/html/wiki/Elements)
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 : |