Recueil de recettes quasi-magiques utilisant le "Mix-Scripting"       (site non-furmeur)

 

       Menu 

 

 

 

 

 

 

Les fichiers PDF sont d'un usage courant. Ce chapitre du grimoire contient quelques recettes intéressantes, pour imprimer, visualiser ou créer des fichiers PDF.

 
Lorsque vous aurez terminé la consultation d'un article, vous pouvez revenir ici en cliquant sur le bouton "précédent" de votre navigateur, ou avec [Alt]-[flèche_gauche]

 

 

 

 

 

 

 

 

 

 

 

 
 Imprimer automatiquement un fichier .PDF  (avec SumatraPDF)

SumatraPDF est un lecteur PDF qui présente les caractéristiques suivantes :                     
 - c'est un logiciel libre, et gratuit
 - il est de (très) petite taille (moins de 1 Mo)
 - en plus de la visualisation, il permet d'imprimer un fichier .PDF, par des options en ligne de commande ; notamment : 
      -
print-to-default  FILE_NAME.PDF         (pour imprimer le fichier FILE_NAME.PDF sur l'imprimante par défaut) 
      -print-to  PRINTER_NAME  FILE_NAME.PDF    (pour imprimer sur un imprimante nommée) 
      -exit-on-print       (pour que SumatraPDF se ferme tout seul, en fin d'impression) 

Vous pouvez le télécharger là : 
       
http://blog.kowalczyk.info/software/sumatrapdf/download.html

Documentation : 
          http://blog.kowalczyk.info/software/sumatrapdf/manual.html  

 
 Créer des fichiers .PDF, avec ghostscript et une imprimante standard de Windows 

Pour cette formule , nous allons utiliser : 

 - GhostScript
 - une imprimate standard de Windows ; "standard" dans le sens où le driver est fourni avec Windows (XP ou Vista), ce qui évite de télécharger des choses inutiles.
 - De façon optionnelle, un batch ou un utilitaire pour automatiser les traitements.

Le principe adopté ici, est de faire créer par une imprimante, un fichier PostScript (.ps) ; ce fichier sera ensuite converti en PDF par GhostScript.

 Ghostscript 

GhostScript est un logiciel de conversion de format de fichiers. Il peut, entre autres, et c'est ce qui nous intéresse, convertir du PostScript en PDF.
C'est un logiciel libre, gratuit, d'origine universitaire. Vous trouverez le site qui lui est consacré, là :  http://pages.cs.wisc.edu/~ghost/       
La dernière version précompilée pour Windows est la 8.61 (en date de mai 2008). Vous pouvez la télécharger là :  http://pages.cs.wisc.edu/~ghost/doc/GPL/gpl861.htm
Attention à ne pas télécharger les sources, mais bien le fichier binaire (auto-extractible). Un lien direct :  http://mirror.cs.wisc.edu/pub/mirrors/ghost/GPL/gs861/gs861w32.exe
Ghostscript fonctionne sous Windows-2000, XP, Vista et d'autres.

Une fois téléchargé, il faut l'installer. 

Pour info, GhostScript est utilisé par la plupart des logiciels de création de PDF ; par exemple, l'utilisent : PDFcreator, CutePDF, Win2PDF, etc.    (les logiciels d'Adobe ne l'utilisent pas, ni doPDF).

Il peut être intéressant de noter dans quel répertoire est installé GhostScript, et, surtout, le fichier gswin32c.exe, que nous utiliserons pour effectuer les conversions. Si nécessaire, la commande suivante permet de retrouver le chemin, qui est le même que gsdll32.dll :
    reg query "HKLM\SOFTWARE\GPL Ghostscript\8.61" /v GS_DLL

 Installer l'imprimante 

Simple. Il faut :
 - Ouvrir le dossier "Imprimantes", à partir du Panneau de Configuration.
 - Choisir "Nouvelle imprimante", ou "Ajouter une imprimante" (Vista).
 - Sélectionner "imprimante locale".
 - Choisir le port local   FILE:   
 - Choisir l'imprimante dans la liste. Cette imprimante doit gérer PostScript. Perso, j'ai opté pour "HP Color LaserJet 8500 PS", parce que cette imprimante existe aussi bien sous XP que sous Vista, qu'elle gère la couleur, et des formats de papier jusqu'au A2. Mais, il est possible de choisir d'autres imprimantes, du moment que leur driver Windows utilise PostScript.
 

 Première création (manuelle) d'un PDF 

Nous avons déjà tout le nécessaire. Pour commencer, il est conseillé de choisir (ou déterminer) un répertoire dans lequel seront enregistrés les fichiers .ps et .pdf. Il faut éviter  C:\   C:\Program Files   et tous les répertoires pouvant être protégés par le système (notamment l'UAC de Vista). Pour ce premier essai, nous allons utiliser   C:\temp  (s'il n'existe pas, il faut le créer).

 - L'étape suivante consiste à imprimer quelque chose, sur l'imprimante que nous avons installée. Dès l'impression, Windows va ouvrir une fenêtre, titrée "Impression dans un fichier", pour demander le nom du fichier dans lequel l'impression sera enregistrée. Pour l'exemple, il faut rentrer    C:\temp\monimpression.ps   (ne pas oublier l'extension  ".ps")

 - Une fois l'impression terminée, pour effectuer la conversion en PDF, il suffit de rentrer cette commande : 
"gswin32c.exe"  -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -r600 -sOutputFile="monimpression.pdf" -c save pop -f "monimpression.ps" 
(en une seule ligne ; si vous avez suivi l'exemple, vous pouvez copier/coller la commande). 
À noter que le chemin de gswin32c.exe peut changer, selon l'installation (à adapter au besoin).

 - Pour lancer la commande, vous pouvez : 
        - faire [Démarrer] + [Exécuter], et saisir (ou coller) la commande ; 
        - faire {Windows} R , et saisir (ou coller) la commande ; 
        - ouvrir l'invite de commande, et saisir (ou coller) la commande.

 - C'est tout !  Le fichier C:\temp\monimpression.pdf  doit maintenant exister.

Simple, non ? 

 Automatiser la commande de conversion avec un batch  

Le Batch ci-dessous va :
 - Repérer le fichier .ps le plus récent du répertoire.
 - Rechercher, dans le registre, l'emplacement de Ghostscript (gswin32c.exe).
 - Appliquer la commande de conversion au fichier repéré.

Pour utiliser ce batch, il suffit de se mettre en Invite_de_commande, d'aller dans le répertoire où l'on a créé le fichier postscript (.ps), et de lancer le batch.  Si vous utilisez toujours le même répertoire, vous pouvez y copier le batch, puis le lancer directement depuis Windows, ou faire un raccourci sur le bureau. 
 
Voici le Batch : 

::ps2pdf.bat, par Michel Claveau Informatique - http://mclaveau.com/grimoire
@echo off
setlocal

FOR /F %%f IN ('dir *.ps /B /O:D') DO set FICHIEROUT="%%f"
set FICHIERPDF=%FICHIEROUT:.ps=.pdf%

echo Fichier postscript : %FICHIEROUT%
echo Fichier PDF        : %FICHIERPDF%

FOR /F "tokens=3-9" %%c IN ('reg query "HKLM\SOFTWARE\GPL Ghostscript\8.61" /v GS_DLL ^| FIND "GS_DLL"') DO SET TEMPO=%%c
set GS=%TEMPO:.dll=.exe%
set GS=%GS:dll32=win32c%
"%GS%"  -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -r600 -sOutputFile="%FICHIERPDF%" -c save pop -f "%FICHIEROUT%" >null

endlocal
goto :EOF

Le fichier est aussi accessible, tout prêt, en cliquant_ici.

 Une variante du Batch (composition automatique du nom du PDF)  

On suppose que l'on utilise un nom de fichier toujours identique, pour chaque impression (C:\temp\temp.ps). Le batch ci-dessous, dérivé du précédent, va créer un fichier PDF, à partir du fichier temp.ps ; le nom du fichier PDF sera composé de la date + un tiret + l'heure. Par exemple :  081231-084500.pdf
Le Batch :

::ps2pdf2.bat, par Michel Claveau Informatique - http://mclaveau.com/grimoire
@echo off
setlocal

set FICHIEROUT="temp.ps"
set J=%DATE:~0,2%
set M=%DATE:~3,2%
set A=%DATE:~-2%
set H=%TIME:~0,2%
set H=%H: =0%
set I=%TIME:~3,2%
set S=%TIME:~6,2%
set FICHIERPDF=%A%%M%%J%-%H%%I%%S%.pdf

echo Fichier postscript : %FICHIEROUT%
echo Fichier PDF        : %FICHIERPDF%

FOR /F "tokens=3-9" %%c IN ('reg query "HKLM\SOFTWARE\GPL Ghostscript\8.61" /v GS_DLL ^| FIND "GS_DLL"') DO SET TEMPO=%%c
set GS=%TEMPO:.dll=.exe%
set GS=%GS:dll32=win32c%
"%GS%"  -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -r600 -sOutputFile="%FICHIERPDF%" -c save pop -f "%FICHIEROUT%" >null
del %FICHIEROUT%

endlocal
goto :EOF

Le fichier est aussi accessible, tout prêt, en cliquant_ici.

 Aller plus loin dans l'automatisation de la création d'un fichier .PDF  

J'ai préparé un petit utilitaire (autopspdf.exe) qui effectue les choses suivante : 
 - Attente d'apparition de la fenêtre "Impression dans un fichier".
 - Remplissage automatique du nom du fichier (plus de saisie manuelle).
 - Attente de la fin d'impression (que le fichier postscript soit créé).
 - Lancement de l'instruction de conversion en PDF.
 - Attente de la fin de création du fichier PDF.
 - Lancement d'une commande post-traitement.
Toutes ces opérations sont effectuées en tâche de fond. Les paramètres sont gérés via le fichier autopspdf.ini), qui doit se trouver dans le même répertoire que autopspdf.exe
Utilisation : il suffit de lancer autopspdf.exe en début de session de travail (vous pouvez le mettre dans le répertoire de démarrage de Windows.
Vous pouvez télécharger autopspdf en  cliquant_ici.

 

Arrivé à cette étape, nous avons réalisé une automatisation complète de la création de fichiers PDF.

 Modifier les paramètres d'impression 

Pour changer les paramètres d'impression, il faut aller dans les propriétés de l'imprimante, et cliquer sur les boutons "Avancé" (attention : il y en a deux, dans deux onglets différents).
Notez que l'orientation, les formats de papier, les couleurs, etc. peuvent aussi être modifiés pas le fichier PDF lui-même. On affecte, ici, uniquement les options/paramètres au démarrage de l'impression.

 Solutions alternatives 

Il existe, sur Internet beaucoup de solutions, pour créer des PDF, à partir d'imprimantes virtuelles. Parmi celles-ci, j'aime bien PDFcreator. C'est mon préféré pour les raisons suivantes : 
 - On peut complètement automatiser la gestion des noms de fichiers PDF ; on peut donc éviter toute saisie manuelle.
 - PDFcreator intègre un serveur COM ; cela le rend pilotable par script, ou par programmation. Avec des possibilités assez intéressantes (choix des ruptures de pages / documents ; possibilité de grouper plusieurs impressions dans le même document ; etc.). Mais attention, ce n'est pas simple.
 - Il existe de nombreuses options en ligne de commande. Mais, il faut regarder la documentation.

PDFcreator est téléchargeable ici :  http://www.pdfforge.org/products/pdfcreator/download


 Visualiser des fichiers PDF  (présentation de 3 visualiseurs) 

Sous Windows, il existe plusieurs visualiseurs de fichiers PDF. Je vais vous en présenter trois. Mais, auparavant, il semble utile de rappeler que les fichiers PDF ont beaucoup de possibilités, dont certaines sont peu connues. Un fichier PDF utilise normalement 8 polices de caractères prédéfinies. Cependant, PDF peut utiliser d'autres polices, dites polices externes, comme les polices TrueType ou les polices OpenType. Si un document PDF utilise des polices externes, la lecture ne se fera correctement que si ces polices sont installées dans l'ordinateur qui lit. Ou alors, il faut utiliser la possibilité de PDF d'embarquer les polices. Elles sont alors incluses avec le document, et seront (ou plutôt devraient être) utilisées par le visualiseur.
PDF peut également gérer des formulaires, avec saisie contrôlée, et renvoi des données à un serveur. PDF peut aussi être programmé (scripté). Il intègre un langage, ActionScript, sorte de cousin de Javascript, à la sauce Adobe, et que l'on retrouve également dans Flash, Flex, AIR, etc. Notons enfin les possibilités de cryptage, de gestion des certificats numériques, etc. Toutefois, un seul visualiseur est capable de traiter/gérer tous ces aspects avancés : Adobe-Reader.

 Adobe Reader  

Appelé autrefois Acrobat-Reader, c'est le visualiseur le plus célèbre, le plus courant, mais aussi le plus gros, le plus lourd, et le plus lent.
Il est capable de gérer TOUS les aspects des fichiers PDF, y compris les formulaires et les scripts. 
A noter qu'il peut être intégré à Internet-Explorer, ou dans des HTA. Cependant, la version Active-X qui existait autrefois, a été supprimée après la version 5. On peut toutefois encore le piloter par programmation, en utilisant Internet-Explorer comme pont (même avec la version Active-X de IE).
Adobe-Reader peut être obtenu ici : http://www.adobe.com/fr/products/acrobat/readstep2.html  (attention : ce site va essayer de vous installer Google-bar (option cochée par défaut, à décocher). Et aussi, Adobe utilise on propre logiciel de téléchargement, qui va s'installer, et ralentir ensuite votre ordinateur, en cherchant très souvent de nouvelles versions. Adobe-Reader installe aussi, dans "Démarrage", un utilitaire sensé accélérer le lancement d'Adobe-Reader ; à enlever dès l'installation terminée.)
 

 SumatraPDF  

SumatraPDF est le visualiseur PDF le plus petit et le plus rapide que je connaisse. Malgré sa taille inférieure à 1 Mo, il visualise les caractères avec une excellente qualité (notamment les petits corps). De plus, il intègre des possibilités d'impression des fichiers PDF, en ligne de commande, ce qui est très intéressant pour scripter.
Certes, ses possibilités sont limitées à la visualisation (+impression) de fichiers. Mais, il est vraiment très rapide. C'est un logiciel libre, et gratuit, que l'on peut retrouver ici :  http://blog.kowalczyk.info/software/sumatrapdf 
Dernier point, c'est au premier lancement de SumatraPDF que l'on choisit d'en faire le lecteur PDF par défaut.
 

 Foxit-reader  

Foxit s'est fait connaitre comme étant un visualiseur PDF plus petit et plus rapide qu'Adobe-Reader. Ce fût vrai, mais, à force d'intégrer de nouvelles fonctions et des correctifs, Foxit a pris du poids, et perdu de la vitesse. Actuellement, même s'il se lance encore un peu plus rapidement qu'Adobe-Reader, le double fait qu'il soit plus de huit fois plus gros que SumatraPDF, et qu'il lui manque certaines fonctions avancées d'Adobe-Reader font qu'il se trouve dans une situation "entre deux chaises". 
Le site de Foxit-reader :  http://www.foxitsoftware.com/pdf/rd_intro.php  (site un peu lent par moment).
     

 Conclusion  

Il existe d'autres visualiseurs. Certains sont intégrés à des suites logicielles, ou à des visualiseurs plus complets, mais plus lourds. 
Perso, j'utilise essentiellement SumatraPDF (à cause de sa vitesse et de ses possibilités d'impression) et, lorsque des besoins plus complets apparaissent, Adobe-Reader.

 
 Créer des fichier PDF avec Python  

Il existe, pour Python, une librairie, libre, permettant de créer des fichiers PDF. Elle est fournie par ReportLab (http://www.reportlab.org). Il existe d'autres librairies, ou possibilités, mais la librairie de RepotLab travaille bien, et est connue depuis plusieurs années.

Seulement, cette librairie n'est pas très simple d'utilisation. Notamment pour des français. Alors, pour faciliter le développement d'applications générant du PDF en Python, j'ai créé une classe.  Elle s'appelle pxpdf.py, car, si elle peut s'utiliser de manière autonome (standalone), son utilisation avec Ponx lui permet d'être utilisable depuis tout langage/application capable d'utiliser des objets COM (voir http://ponx.org/.ponx pour plus de détails sur Ponx).

Cette classe est disponible là :  http://www.ponx.org/download/CD/PONX/pxpdf.py 
Elle contient un exemple, assez complet (en fin du code-source).