Convertir un Word en PDF en ligne de commande
La commande la plus universelle est soffice --headless --convert-to pdf document.docx : LibreOffice convertit le fichier sans ouvrir de fenêtre, sous Windows, macOS et Linux. Si Word est installé sous Windows, un script PowerShell qui pilote Word donne un PDF identique à celui de Word.
En bref
- Installez LibreOffice (gratuit).
- Lancez
soffice --headless --convert-to pdf --outdir pdf document.docx. - Le PDF apparaît dans le dossier
pdf. Fermez LibreOffice avant, sinon la commande peut ne rien produire.
LibreOffice sans interface : soffice --convert-to pdf
soffice --headless --convert-to pdf --outdir /chemin/sortie document.docx
--headless: aucune fenêtre ne s’ouvre.--convert-to pdf: format de sortie. LibreOffice choisit le filtre adapté ; pour un document texte, c’estwriter_pdf_Export, que l’on peut écrire explicitement :--convert-to pdf:writer_pdf_Export.--outdir: dossier de destination. Sans cette option, le PDF est créé dans le dossier courant, pas à côté du fichier source.
Le PDF porte le nom du document avec l’extension .pdf, et un fichier du même nom déjà présent est remplacé. La même commande accepte les .doc, .odt et .rtf.
Chemin de l’exécutable selon le système
| Système | Commande |
|---|---|
| Windows (invite de commandes) | "C:\Program Files\LibreOffice\program\soffice.exe" |
| Windows (PowerShell) | & 'C:\Program Files\LibreOffice\program\soffice.exe' |
| macOS | /Applications/LibreOffice.app/Contents/MacOS/soffice |
| Linux (paquet de la distribution) | soffice ou libreoffice |
| Linux (Flatpak) | flatpak run org.libreoffice.LibreOffice |
Exemple complet sous Windows, depuis l’invite de commandes :
"C:\Program Files\LibreOffice\program\soffice.exe" --headless --convert-to pdf --outdir C:\PDF C:\Docs\rapport.docx
Et sur Mac :
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf --outdir ~/Desktop ~/Documents/rapport.docx
Sous Linux, l’installation et les polices à ajouter sont détaillées dans Word en PDF sous Linux.
Options PDF : PDF/A, plage de pages, balises
Depuis LibreOffice 7.4, les options d’export se passent en JSON après un deuxième deux-points. Chaque option prend la forme "Nom":{"type":"…","value":"…"}. Pour un PDF/A, sous Linux et macOS :
soffice --headless --convert-to 'pdf:writer_pdf_Export:{"SelectPdfVersion":{"type":"long","value":"2"}}' document.docx
Le même exemple dans l’invite de commandes Windows, où les guillemets internes s’échappent par une barre oblique inverse :
"C:\Program Files\LibreOffice\program\soffice.exe" --headless --convert-to pdf:writer_pdf_Export:{\"SelectPdfVersion\":{\"type\":\"long\",\"value\":\"2\"}} document.docx
| Option | Type | Valeurs |
|---|---|---|
SelectPdfVersion | long | 0 : PDF 1.7 (par défaut) · 1 : PDF/A-1b · 2 : PDF/A-2b · 3 : PDF/A-3b · 15 / 16 / 17 : PDF 1.5 / 1.6 / 1.7 |
PageRange | string | Pages à exporter, par exemple "2-5" |
UseTaggedPDF | boolean | "true" pour un PDF balisé (accessibilité) |
PDFUACompliance | boolean | "true" pour viser la norme PDF/UA |
ExportBookmarks | boolean | "true" par défaut : les titres deviennent des signets |
Plusieurs options se combinent dans le même objet, séparées par une virgule :
soffice --headless --convert-to 'pdf:writer_pdf_Export:{"SelectPdfVersion":{"type":"long","value":"2"},"UseTaggedPDF":{"type":"boolean","value":"true"}}' document.docx
La liste complète figure dans l’aide officielle : paramètres PDF en ligne de commande.
Dans Windows PowerShell 5.1 (et PowerShell 7 avant la version 7.3), les guillemets doubles placés à l’intérieur d’un argument sont supprimés avant d’atteindre soffice : le JSON arrive cassé et les options sont ignorées. Utilisez l’invite de commandes, ou PowerShell 7.3 et plus avec la forme entre apostrophes.
Les pièges de soffice
La commande ne produit rien
Si LibreOffice est déjà ouvert (y compris son démarrage rapide), la commande est transmise à l’instance existante et la conversion peut échouer sans message. Fermez LibreOffice, ou donnez à la conversion un profil utilisateur séparé :
soffice -env:UserInstallation=file:///tmp/lo-conversion --headless --convert-to pdf document.docx
Sous Windows, le chemin s’écrit file:///C:/Temp/lo-conversion. C’est aussi la bonne pratique pour lancer plusieurs conversions en parallèle ou sur un serveur : un profil par processus.
La mise en page diffère de Word
LibreOffice recalcule la pagination avec les polices présentes sur la machine. Sur un serveur sans Calibri ni Cambria, installez au minimum les polices métriquement compatibles Carlito et Caladea. Voir polices différentes dans le PDF.
Aucun message dans la console Windows
Utilisez soffice.com (dans le même dossier que soffice.exe) : cette variante console attend la fin de la conversion et affiche les messages.
Windows : PowerShell et Word (COM)
Si Microsoft Word est installé, PowerShell peut le piloter et appeler la méthode ExportAsFixedFormat, la même que Fichier › Exporter. Le rendu est celui de Word, au pixel près. Le chiffre 17 correspond à la constante wdExportFormatPDF.
$docx = (Resolve-Path '.\rapport.docx').Path
$pdf = [System.IO.Path]::ChangeExtension($docx, '.pdf')
$word = New-Object -ComObject Word.Application
$word.Visible = $false
try {
$doc = $word.Documents.Open($docx, $false, $true) # ConfirmConversions, ReadOnly
$doc.ExportAsFixedFormat($pdf, 17) # 17 = wdExportFormatPDF
$doc.Close($false)
} finally {
$word.Quit()
}
Word exige des chemins absolus, d’où Resolve-Path. Pour obtenir des signets à partir des titres et un PDF/A (ISO 19005-1), il faut renseigner les paramètres dans l’ordre, car PowerShell ne permet pas de les nommer :
# OutputFileName, ExportFormat, OpenAfterExport, OptimizeFor, Range, From, To, Item,
# IncludeDocProps, KeepIRM, CreateBookmarks, DocStructureTags, BitmapMissingFonts, UseISO19005_1
$doc.ExportAsFixedFormat($pdf, 17, $false, 0, 0, 1, 1, 0, $true, $true, 1, $true, $true, $true)
Ici, 0 pour OptimizeFor signifie « impression », 0 pour Range « tout le document », 1 pour CreateBookmarks « signets à partir des titres ». La documentation de la méthode est sur Microsoft Learn.
Si l’exécution des scripts est bloquée, lancez le fichier avec powershell -ExecutionPolicy Bypass -File .\convertir.ps1. Microsoft déconseille d’automatiser Office sur un serveur sans session utilisateur : pour un service, préférez LibreOffice.
Pandoc, et pourquoi l’éviter ici
pandoc document.docx -o document.pdf
Pandoc ne « convertit » pas la mise en page : il extrait la structure (titres, paragraphes, listes, tableaux, images) et la recompose avec LaTeX, qu’il faut installer à part (pdflatex par défaut, --pdf-engine=xelatex pour utiliser les polices du système). Marges, polices, en-têtes, pieds de page et zones de texte du document Word sont perdus. C’est utile pour publier un texte, pas pour obtenir le PDF fidèle d’un .docx.
Quelle méthode choisir ?
| Méthode | Systèmes | Fidélité à Word | PDF/A | Serveur |
|---|---|---|---|---|
LibreOffice soffice | Windows, macOS, Linux | Bonne si les polices sont présentes | 1b, 2b, 3b | Oui |
| PowerShell + Word | Windows | Exacte | PDF/A-1 | Déconseillé |
| pandoc | Windows, macOS, Linux | Mise en page refaite | Non | Oui |
Pour traiter un dossier entier, les variantes avec *.docx et une boucle PowerShell sont dans convertir plusieurs Word en PDF.
Un seul document à convertir et pas envie d’ouvrir un terminal ? Le convertisseur du site fonctionne dans le navigateur, sans envoi du fichier.
Convertir sans ligne de commande