11 juin 2010

Convertir vos fichiers word au PDF en utilisanat PDFCreator

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 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.

warning 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.

Aucun commentaire:

Enregistrer un commentaire