Convertir en ligne de commande des documents en utilisant --convert-to sous Windows 10

From The Document Foundation Wiki
< Faq‎ | General
Jump to: navigation, search
This page is a translated version of the page Faq/General/150 and the translation is 100% complete.

Other languages:
čeština • ‎dansk • ‎English • ‎français • ‎italiano • ‎한국어

Note

Nous prenons l’exemple d'une conversion de .docx vers .odt, mais la syntaxe et les étapes à suivre sont les mêmes pour les autres formats supportés par LibreOffice.


Contexte

Sous MS-Windows 10 on peut utiliser une commande telle que soffice.exe --convert-to odt my_document.docx pour convertir my_document.docx du format Microsoft docx vers le format OpenDocument (odt). L’extension --convert-to permet de définir un ensemble de documents en utilisant la syntaxe générique de spécification des fichiers. Par exemple on peut utiliser *.docx pour désigner l’ensemble des fichiers .docx présents dans le répertoire courant.


Problème

Lorsque cette extension est utilisée dans l’interface de commande de Windows, rien ne va plus si on a plus d’un fichier. Il semble que LibreOffice ne supporte pas d’être exécuté en plusieurs instances lorsqu’il est lancé en ligne de commande. Si on tente une conversion sur plusieurs fichiers, rien ne semble se passer, et on se retrouve en gros avec 2 fois autant de process LibreOffice qu’il y avait de fichiers à traiter. Lorsque vous tuez manuellement ces process, vous pouvez obtenir deux ou trois fichiers convertis, aléatoirement.


Solution

Pour pallier à ceci, le plus simple est d’utiliser le Windows Subsystem for Linux Environment fourni par Microsoft pour Windows 10. Vous pouvez l’installer simplement en suivant les instructions données ici : https : //docs.microsoft.com/fr-fr/windows/wsl/install-win10/


Une fois cela fait, vous aurez accès à un shell bash assez sympa s’exécutant au-dessus du système Windows sous-jacent, et la fonction --convert-to sera utilisable, en mode synchrone.


En bref

  1. Identifier le chemin complet vers soffice.exe.
  2. Changer de répertoire vers celui contenant les fichiers à convertir après avoir créé un répertoire de réception.
  3. Passer cette commande : <path to soffice.exe> --convert-to odt --outdir <my_output_directory> *.docx


Exemple :

"/mnt/c/Program Files/LibreOffice 5/program/soffice.exe" --convert-to odt --outdir ./Convertis_Vers_ODT *.docx convertira les fichiers docx présents dans le répertoire courant en leur équivalent au format .odt qu’il placera dans le sous-répertoire Convertis_Vers_ODT.


Pourquoi ?

WSL monte un système de fichiers complet, pour lui-même. Donc la syntaxe utilisée pour spécifier l’emplacement d’un fichier est différente de celle de Windows. La première différence est le dossier racine : Sous Windows, il est traditionnellement C:\, l'équivalent dans le shell bash est /mnt/c/. Ensuite, le séparateur d’éléments sous Windows est le \, alors que sous Unix c'est le /. Pour le reste, les règles sont les mêmes, le shell bash supporte les mêmes jeux de caractères que Windows ainsi que les spécifications de noms de fichiers longs et comportant des espaces, pourvu qu’on les entoure de doubles-guillemets droits (").


Comment trouver la commande ?

Le plus simple pour trouver soffice.exe est d’examiner le raccourci utilisé pour démarrer normalement LibreOffice. Faire un clic droit dessus et choisir "Propriétés", puis copier le contenu du champ "Cible". Dans notre exemple, on obtient "C:\Program Files\LibreOffice 5\program\soffice.exe". Il faut ensuite ajuster la syntaxe aux règles du bash et on obtient ceci : "/mnt/c/Program Files/LibreOffice 5/program/soffice.exe" Attention, Unix distingue les majuscules/minuscules, pas Windows.


Arrivé là, vous en avez terminé.


Conclusion

L’utilisation du shell bash sous Windows 10 est une manière simple de convertir un lot de fichiers d’un format à un autre en utilisant une fonction native de LibreOffice lorsqu’on l’invoque en ligne de commande. Le travail se fait sans heurt, efficacement.


Ou la solution simple, interactive

Si l’on redoute la ligne de commande, il est encore plus simple d’utiliser l'Assistant de Conversion des documents de LibreOffice, tel que décrit dans la page d'aide


Pour le démarrer, Menu Fichiers - Assistants - Convertisseur de Documents


Un utilisateur a rapporté qu’il avait dû traiter son lot de fichiers par paquets de 200 parce que la conversion échouait parfois.

Or the actual description

The problem is not "all the conversions are started simultaneously" and everything. It's simply that LibreOffice's --convert-to in fact does not support using wildcards itself, and only works on non-Windows systems because they process the wildcards in their shells (and of course, these shells also work on Windows, like with Cygwin or WSL).

What does this mean? This means that in Bash, when you send a command like soffice --convert-to odt path/to/*.doc, the command is first analyzed by Bash, and it finds the path/to/*.doc there, and enumerates every file that matches the mask, puts their names into one string, and substitutes the path/to/*.doc with something like path/to/1.doc path/to/2.doc path/to/345.doc. This is what LibreOffice sees.

Windows' cmd.exe does not do that, and sends the path/to/*.doc to LibreOffice unmodified. LibreOffice simply tries to open the file named *.doc, and fails. That's all.

In Windows' cmd.exe, the pre-processing should be done explicitly, like this:

  for %f in ("path\to\*.doc") do "C:\Program Files\LibreOffice\program\soffice" --convert-to odt "%f"

The enhancement request to implement own wildcard processing is tdf#48413.