Midilibre.fr
Tous les blogs | Alerter le modérateur| Envoyer à un ami | Créer un Blog

08/03/2009

[pdf] - Convertir en masse des fichiers WORD en PDF

374385.jpgJ'ai eu cette semaine à faire face à un cas bien particulier, un client m'a fait parvenir une centaine de fichier word (au format Word), ces documents devaient être placé sur son site web... Farouche opposant à ce format de fichier, j'ai donc informé le client, sur les risques qu'engendrait l'utilisation de ce format sur un site web : impossibilité de lire ces fichiers pour ceux qui ne possèdent pas le pack office, problème de compatibilité entre les versions... bref, j'ai convaincu  mon client de faire des liens vers des PDF. Seulement voila convertir cette masse de fichiers en PDF ne s'annoncait pas comme une mince affaire. J'ai donc dégainé ma trousse à outils GNU/Linux, et en moins de 10 minutes j'ai pu avoir tout mes fichiers au bon format. Merci bash et les macros d'openoffice. voici comment procéder :

Ouvrez OOwriter (Traitement de texte openoffice) puis cliquez sur le menu Outils -> Macros -> Gérer les macros -> OpenOffice.org BASIC.

Sélectionnez Mes Macros -> Standard -> Module1 et cliquez sur Editer. Effacer les trois lignes présentes dans l'éditeur, et coller le code ci dessous :

        REM  *****  BASIC  *****

Sub ConvertWordToPDF(cFile)
cURL = ConvertToURL(cFile)
oDoc = StarDesktop.loadComponentFromURL(cURL, "_blank", 0,
Array(MakePropertyValue("Hidden", True), ))

cFile = Left(cFile, Len(cFile) - 4) + ".pdf"
cURL = ConvertToURL(cFile)

oDoc.storeToURL(cURL, Array(MakePropertyValue("FilterName",
"writer_pdf_Export"), ))

oDoc.close(True)

End Sub

Function MakePropertyValue( Optional cName As String, Optional uValue )
As com.sun.star.beans.PropertyValue
Dim oPropertyValue As New com.sun.star.beans.PropertyValue
If Not IsMissing( cName ) Then
oPropertyValue.Name = cName
EndIf
If Not IsMissing( uValue ) Then
oPropertyValue.Value = uValue
EndIf
MakePropertyValue() = oPropertyValue
End Function

Enregistrez et quitter OpenOffice, il nous reste à créer un fichier qui s'appelare doc2pdf, de le rendre exécutable (avec chmod +x doc2pdf) et d'y coller le code suivant :

  #!/bin/sh  DIR=$(pwd) DOC=$DIR/$1                                                                                
/usr/bin/oowriter -invisible
"macro:///Standard.Module1.ConvertWordToPDF($DOC)"

Voila, il ne reste plus qu'a taper : doc2pdf mon_fichier.doc et vous aurez un joli mon_fichier.pdf. Mais vous allez me dire, comment as-tu fait pour la centaine de fichier ? Et bien un simple :
for i in *.doc; do echo $i; doc2pdf "$i"; sleep 5; done

Rendons à césar ce qui est à césar, cette astuce à été trouvé ici