Créer des fichiers PDF avec HTMLDoc
Techniques
Cette section permet de regrouper un ensemble de techniques ou de scripts qui ont l'originalité d'arriver à résoudre une difficulté avec le moindre effort ou qui sont particulièrement efficaces...
Techniques / PDF
- Convertir des fichiers HTML en PDF
Il peut être utile de produire des fichiers PDF depuis une page dynamique, pour générer les fichiers à la volée par exemple
afin de créer des états de type publipostage , des listings ou même un formulaire à remplir. Plusieurs solutions s'offre alors
à vous suivant le langage utilisé. Une méthode pratique et gratuite, utilisable par tous les langages peut être de transformer
des fichiers HTML en PDF. Il existe pour cela plusieurs techniques. L'une d'elle repose sur l'utilisation d'un utilitaire gratuit : HTMLDoc.
HTMLDoc est un exécutable qui permet de convertir un ou plusieurs fichiers HTML en fichier PDF. Il s'utilise normalement avec une interface
graphique mais peut aussi être appelé en ligne de commande.
Avantages sur un serveur WEB :
- Il est trés facile de générer un fichier HTML à transformer.
- C'est une des méthodes les plus rapides et plus fiables pour des fichiers PDF simples.
- De nombreux formats d'images sont supportés : BMP, GIF, JPEG, et PNG.
- La table des matières peut être créée automatiquement
Inconvénients :
- HTMLDOC ne gère pas encore les feuilles de styles CSS.
- Il est moins aisé de générer des documents HTML trop complexes ( Par exemple : il existe une limitation dans le nombre d'imbrication de tableau HTML).
- La compression des fichiers n'est pas optimale, aussi il faudrait éviter la génération de fichier PDF trop volumineux.
- Il est difficile d'avoir un formatage précis des fichiers générés
Le fichier HTML peut être converti en fichier pdf avec un ligne de commande sous DOS :
htmldoc -t pdf --quiet -webpage -f fichier.pdf fichier.html
Par contre depuis un site dynamique, si vous devez générer les fichiers PDF à la volée depuis ASP ou PHP, par exemple, il vous faut écrire un fichier HTML qui sera transformer via la ligne de commande exécutée depuis le serveur WEB . Cet appel peut être coûteux en temps de traitement.
Générer un fichier PDF à la volée depuis ASP :
' ****** La ligne de commande CmdeHTMLDOC = chr(34)&"C:\Program Files\HTMLDOC\htmldoc.exe" &_ chr(34)& " -t pdf --quiet "& _ " --webpage -f " ' En consultant le fichier de documentaion de HTMLDOC ' vous vous rendrez compte ' qu'un certains nombre de paramètres peuvent aussi être ' précisés, comme la police, sa taille, la compression ' du document final, etc. Par exemple : ' CmdeHTMLDOC = chr(34)& _ ' "C:\Program Files\HTMLDOC\htmldoc.exe" & _ ' chr(34) & " --compression=1 --no-toc " & _ ' " --pagemode document "& _ ' " --textfont Arial "& _ ' " --fontsize 8 "& _ ' " --header ... --footer ... "& _ ' " --size a4 --left 1.5cm "& _ ' " --right 1.5cm "& _ ' " --fontspacing 2 --webpage -f " ' ******* génération du fichier HTML à la volée Set FSO = Server.CreateObject("Scripting.FileSystemObject") name_fileHTML= "fichier.html" dir = Server.MapPath(name_fileHTML) set inF = FSO.OpenTextFile(dir,2,true) inF.write "<html><body>"_ "<table border=""1"" width=""90%"">"_ "<tr><th>Employé</th><th>Salaire</th></tr>"_ "<tr><td>Smith</td><td>1 000 euros</td></tr>"_ "</table>"_ "</body></html>" 'fermeture fichier HTML inF.close ' ******* génération du fichier PDF set wshell=Server.CreateObject("wscript.shell") ' ******* Ligne de commande complétée par les chemins ' ******* des fichiers source HTML et de destination en PDF : fic_html = dir fic_pdf = Server.MapPath("fichier_test.pdf") wpath= CmdeHTMLDOC &chr(34)& _ fic_pdf &chr(34)&" "& chr(34)& fic_html &chr(34) ' ******* Lancement de la commande wshell.Run wpath, SW_SHOWNORMAL,true Set wshell=nothing ' ******* L'ouverture du document peut se faire ' ******* alors simplement en JavaScript : Response.write "<script>window.document.location.href='" & _ Server.MapPath("fichier_test.pdf") & _ "';</script>" ' ******* Mais il est aussi possible d'effectuer ' ******* une redirection sur ' ******* le fichier PDF depuis le serveur ' ******* Fin du script Response.EndConvertir une page HTML en ligne, en fichier PDF depuis PHP :
header("Content-Type: application/pdf"); flush(); $CmdeHTMLDOC= 'htmldoc -t pdf --size A4 --webpage'. ' -f c:\SITE_PROG.pdf http://dypso.free.fr'; passthru($CmdeHTMLDOC);