Imprimez vos documents Word au format PDF à l'aide de PDFCreator

Olivier Lebeau

Comment imprimer vos documents Word pour les versions antérieures à Word 2007 en fichier PDF

- Titre : Imprimez vos documents Word au format PDF à l'aide de PDFCreator

- Auteur : Olivier Lebeau

- Parution : 1 septembre 2007

- Mise à jour : 3 février 2009

- Licence : Copyright ® 2009 Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. L'impression

- III. PDFCreator et le VBA

- III-A. Code fourni par PDFCreator

- III-B. Code personnalisé.

- IV. Remerciements

I - Introduction

Aujourd'hui, le format le plus répandu est probablement le PDF, il ne connait pas de limite liée à la plateforme, ni au système d'exploitation utilisé. C'est donc un format universel pour l'échange de document. Malheureusement, ce format n'est apparu pour Word qu'avec la version 2007 et pour pouvoir l'utiliser il faut installer un complément fourni gratuitement par Microsoft. Un lien vers ce téléchargement est proposé dans la Foire Aux Questions pour Word sur DVP FAQ.

Pour les versions antérieures vous avez plusieurs possibilités, qui peuvent être payantes comme Adobe Acrobat; PDF Creator (en deux mots). Ou des version gratuites qui sont disponibles sur le WEB, la plus célèbre étant probablement PDFCreator (en un seul mot).

C'est cette à cette version que nous allons nous intéresser d'un peu plus près.

Après avoir téléchargé le logiciel d'installation, il faut passer à l'étape suivante : l'installation.
Pour cette étape, on ne peut plus facile et l'interface est en Français.

II - L'impression

Lorsque l'on transforme un document en fichier PDF, on ne parle pas de sauvegarde ou d'exportation mais d'impression. Lors de son installation, le logiciel à crée une imprimante logicielle qui va permettre la transformation de votre document en document PDF.

Si vous allez dans le panneau de configuration et dans la section imprimante, vous verrez une imprimante supplémentaire "PDFCreator". Un clic droit permet à l'aide du menu contextuel d'afficher les propriétés de l'imprimante. On y retrouve toutes les propriétés d'un imprimante classique.

Pour imprimer le document, il faut passer par le menu "Fichier" "Imprimer", ou utiliser la combinaison "Ctrl" + "P". Vous obtiendrez ensuite une boité de dialogue vous proposant de choisir l'imprimante. C'est l'imprimante par défaut qui est active.

Il faut changer l'imprimante par défaut et la remplacer par PDFCreator.
Validez par OK.

Dans cette boîte de dialogue, vous pouvez si vous le désirez changer le nom du document, par défaut c'est le nom du document qui est utilisé par PDFCreator. Si votre document n'a pas encore été sauvegardé, c'est le nom par défaut qui s'y trouve.
Vous pouvez aussi renseigner les propriétés du document.
Cette boîte de dialogue possède d'autres bouton que les traditionnels OK ou Cancel.
Le bouton mettre dans la file d'attente va ouvrir une autre boîte de dialogue contenant les éventuels documents déjà présent dans la liste d'attente.

Le bouton option va ouvrir une boîte de dialogue permettant de modifier ou ajuster certains paramètres.

Une fois l'impression validée, la boîte de dialogue standard vous demandant de préciser l'endroit de la sauvegarde et le nom du fichier peut encore être changé.
Lorsque toutes ces manipulations sont terminées, votre document est transformé en un fichier PDF.

Si votre document possède des hyperliens, seul les liens en "dur" seront présents dans votre PDF, les liens cachés, comme les tables des matières, seront ignorés.

III - PDFCreator et le VBA

III-A - Code fourni par PDFCreator

Pour le VBA, PDFCreator est fourni avec un formulaire VBA. Pour pourvoir utiliser ce formulaire, il faut préalablement l'importer dans un module.
Il faut pour cela ouvrir l'éditeur VBA par la combinaison "Alt" + "F11", ou Outils, Macro, Visual Basic Editor.

Ensuite, Fichier, Importer un fichier et le répertoire qui contient les fichiers est "C:\Program Files\PDFCreator\COM\MS Office\".
Une fois importé, le fichier donne accès a un formulaire.

Derrière ce formulaire, on retrouve le code qui l'accompagne.
La première chose à faire pour utiliser ce formulaire c'est de le charger.
Pour charger le formulaire, on utilisera

Load "frmPDFCreator"
frmPDFCreator.Show

Le simple fait de charger le formulaire va initialiser la procédure d'impression.

Private Sub UserForm_Initialize()
If Len(ActiveDocument.Path) = 0 Then
MsgBox "Please save the document first!", vbExclamation 'En français : "Veuillez sauvegarder votre document avant de poursuivre "
End
End If
Set PDFCreator1 = New clsPDFCreator
With PDFCreator1
If .cStart("/NoProcessingAtStartup") = False Then
CommandButton1.Enabled = False
AddStatus "Can't initialize PDFCreator."    ' fr "initialisation de PDFCreator Impossible"
Exit Sub
End If
DefaultPrinter = ActivePrinter
SetPrinter "PDFCreator"
End With
AddStatus "PDFCreator initialized."    ' fr "Imprimante PDF initialisée"
End Sub

La première action du code lors du chargement du formulaire est la vérification du nom et du chemin du document pour s'assurer que le document a bien été sauvegardé.
If Len(ActiveDocument.Path) = 0 Si le document n'a pas été sauvegardé, un message vous y invite.
Création d'une instance de PDFCreator.
Set PDFCreator1 = New clsPDFCreator Propriété cStart en lecture seule renvoie un booleen. Si cette propriété est fausse, le bouton de commande est désactivé et la procédure doit être stoppée. Un message dans la fenêtre des statuts est affiché en utilisant la procédure AddStatus. DefaultPrinter = ActivePrinter va stocker dans la variable DefaultPrinter le nom de l'imprimante active et ensuite SetPrinter "PDFCreator" va définir PDFCreator comme imprimante Active.

Private Sub CommandButton1_Click()
Dim outName As String
If InStr(1, ActiveDocument.Name, ".", vbTextCompare) > 1 Then
outName = Mid(ActiveDocument.Name, 1, InStr(1, ActiveDocument.Name, ".", vbTextCompare) - 1)
Else
outName = ActiveDocument.Name
End If
CommandButton1.Enabled = False
If OptionButton1.Value = True Then
SaveWholeDocumentAsPDF outName
End If
If OptionButton2.Value = True Then
With PDFCreator1
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = ActiveDocument.Path
.cOption("AutosaveFilename") = outName & "-1_3"
.cOption("AutosaveFormat") = 0                            ' 0 = PDF
.cClearCache
End With
PrintPage 1
Sleep 1000
PrintPage 3
Sleep 1000
PDFCreator1.cCombineAll
Sleep 1000
PDFCreator1.cPrinterStop = False
End If
End Sub

Si l'initialisation s'est déroulée correctement le bouton execute est actif et l'impression peut commencer. La routine tient alors compte des choix effectués dans le groupe d'options.
Si l'option 2 est activée, l'impression se déroule dans la procédure ci-avant et les pages obtenues par la procédure PrintPage 1 et 3 sont assemblées dans un même document avec .cCombineAll.
La partie impression est traitée par le code suivant

Private Sub SaveWholeDocumentAsPDF(Filename As String)
AddStatus "Start ..."
With PDFCreator1
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = ActiveDocument.Path
.cOption("AutosaveFilename") = Filename
.cOption("AutosaveFormat") = 0                            ' 0 = PDF
.cClearCache
DoEvents
ActiveDocument.PrintOut Background:=False
DoEvents
.cPrinterStop = False
End With
End Sub

Le code qui suit sert à imprimer une page déterminée. Le numéro de cette page est défini dans la routine lancée par un clic sur le bouton d'impression du formulaire.

Private Sub PrintPage(PageNumber As Integer)
Dim cPages As Long
cPages = Selection.Information(wdNumberOfPagesInDocument)
If PageNumber > cPages Then
MsgBox "This document has only " & cPages & " pages!", vbExclamation    ' fr "Ce document est composé de seulement "
End If
DoEvents
ActiveDocument.PrintOut Background:=False, Range:=wdPrintFromTo, From:=CStr(PageNumber), To:=CStr(PageNumber)
DoEvents
End Sub

Que ce soit pour une page, plusieurs ou la totalité du document, c'est toujours la méthode printout qui est utilisée.

Private Sub PDFCreator1_eError()
AddStatus "ERROR [" & PDFCreator1.cErrorDetail("Number") & "]: " & PDFCreator1.cErrorDetail("Description")
End Sub

Cette partie sert à exporter vers l'utilisateur le message d'erreur.

Private Sub PDFCreator1_eReady()
AddStatus "File'" & PDFCreator1.cOutputFilename & "' was saved."    ' fr "Le fichier "       " a été sauvegardé."
PDFCreator1.cPrinterStop = True
CommandButton1.Enabled = True
End Sub

Remet l'imprimante en mode attente une fois le document terminé.

Private Sub AddStatus(Str1 As String)
With TextBox1
If Len(.Text) = 0 Then
.Text = Now & ": " & Str1
Else
.Text = .Text & vbCrLf & Now & ": " & Str1
End If
.SelStart = Len(.Text)
.SetFocus
End With
End Sub

Routine pour l'affichage des messages, pour chaque message, on ajoute le temps système.

Private Sub SetPrinter(Printername As String)
With Dialogs(wdDialogFilePrintSetup)
.Printer = Printername
.DoNotSetAsSysDefault = True
.Execute
End With
End Sub

Enlève PDFCreator et remet l'imprimante par défaut.

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
SetPrinter DefaultPrinter
PDFCreator1.cClose
Set PDFCreator1 = Nothing
Sleep 250
DoEvents
End Sub

III-B - Code personnalisé.

Comment utiliser l'imprimante PDFCreator en utilisant son propre code et se passer du formulaire.

Le but est d'intégrer un morceau de code pour le lancer avec un bouton et obtenir en final un document PDF.

Ne pas oublier d'ajouter la référence à PDFCreator dans notre projet.
Ci-dessous, le code qui va nous permettre de lancer l'impression d'un document en PDF. Il ne restera qu'à insérer un bouton dans la barre d'outils pour lancer cette routine.

Sub testPrintPDF()
Dim oldPrinter As String
Dim stChemin As String
Dim stNom As String
' Affichage de la fenêtre de PDF
Shell "C:\Program Files\PDFCreator\PDFCreator.exe", vbNormalFocus

Dim PDFCreator1 As New clsPDFCreator
oldPrinter = ActivePrinter
'On va mettre en mémoire dans une
'variable le nom de l'imprimante par défaut
ActivePrinter = "PDFCreator"
'Mettre comme imprimante par défaut PDFCreator
If Len(ActiveDocument.Path) = 0 Then
stChemin = "c:\temp"
Else
stChemin = ActiveDocument.Path
End If
'Si le document n'a pas été sauvegardé, le PDF sera dans le répertoire c:\temp
'et un nom par défaut documentPDF;pdf
If Len(ActiveDocument.Name) = 0 Then
stNom = "documentPDF.pdf"
Else
stNom = ActiveDocument.Name
End If
'les option PDFCreator
With PDFCreator1
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = stChemin
.cOption("AutosaveFilename") = stNom
.cOption("AutosaveFormat") = 0                            ' 0 = PDF
.cStart
.cClearCache
End With
ActiveDocument.PrintOut Background:=True
PDFCreator1.cClose
ActivePrinter = oldPrinter
' Change l'imprimante par défaut

End Sub

Plusieurs choses sont importantes, la récupération du nom du document et son chemin. Ces deux données vont nous faciliter la tâche et nous allons pouvoir sauvegarder le document dans le même répertoire que notre document Word. Si le document n'a pas été enregistré, l'impression PDF se fera dans le répertoire C:\temp et aura comme nom de fichier documentPDF.pdf

Pour ajouter un bouton dans la barre d'outils, un clic droit, personnaliser, Commandes, Macro et le nom de la procédure devrait s'y trouver.

Nous sommes arrivés au bout.

NB : Dans la version précédente du tuto, je signalais l'activation de l'enregistrement automatique, mais suite à quelques problèmes rencontré, il est préférable de ne pas utiliser cette option.

IV - Remerciements

Merci à l'équipe qui maintient le logiciel PDFCreator en "état de marche". Ces personnes le font bénévolement.
Merci à DVP qui met à notre disposition des ressources d'une qualité exceptionnelle.