Comment convertir un fichier ODT au format PDF?

Réponses:

68

Ouvrez simplement le document avec libre office et choisissez Exporter au format PDF ... :

entrez la description de l'image ici

Pour une solution en ligne de commande, il existe unoconv Installer NOM qui convertit les fichiers à partir de la ligne de commande:

unoconv -f pdf mydocument.odt

Remarque: Ununiv à partir d'Ubuntu 11.10 uniquement dépend de Libre Office. Les versions précédentes d'Unoconv (sous Ubuntu <= 11.04) dépendent d'Open Office (mais elles fonctionneront également avec Libre Office).

Takkat
la source
3
merci de mentionner unoconv, c'est génial!
Boris Däppen
1
pour ceux qui se demandent ce qui est des avantages et des inconvénients de Unoconv vs ligne de commande LibreOffice, cette question pourrait aider: github.com/dagwieers/unoconv/issues/364
Sébastien Lorber
@Takkat unoconv ne semble pas trouver l'emplacement libreoffice5 sur MacOS Sierra, dit-il unoconv: Cannot find a suitable office installation on your system., donc il est inutilisable :(
SebMa
87

Vous pouvez également utiliser la ligne de commande de libreofficepour vos besoins. Cela vous donne l'avantage de la conversion par lots. Mais des fichiers uniques sont également possibles. Cet exemple convertit tous les fichiers ODT du répertoire actuel au format PDF:

libreoffice --headless --convert-to pdf *.odt

Obtenez plus d'informations sur les options de ligne de commande avec:

man libreoffice
Tapeur
la source
Un autre argument en faveur de l'utilisation de la ligne de commande est que, par exemple, dans mon cas, l'interface graphique a soudainement commencé à produire des fichiers PDF défectueux, mais que la ligne de commande fonctionne toujours comme un charme.
Hermann Ingjaldsson
4
Thi9s fonctionne, mais il y a un problème: si l'interface graphique est ouverte, la commande ne fera rien (même pas afficher une erreur). Laid, mais avec cette solution de contournement , vous pouvez ouvrir une nouvelle instance: --env:UserInstallation=file:///path/to/some/directory.
tokland
1
@tokland: Il existe un rapport de bogue pour cela: bugs.freedesktop.org/show_bug.cgi?id=37531
mécanique
1
J'ai également réussi à obtenir une conversion par lots unoconv. Par exemple, j'ai utilisé la ligne unoconv -f pdf *.pptavec succès.
XavierStuvw
2
pour ceux qui se demandent ce qui est des avantages et des inconvénients de Unoconv vs ligne de commande LibreOffice, cette question pourrait aider: github.com/dagwieers/unoconv/issues/364
Sébastien Lorber
8

Voici quelques détails supplémentaires sur la méthode "non-GUI".

  1. Vous pouvez utiliser cette méthode non seulement pour convertir des fichiers ODT en PDF. Cela fonctionnera également pour les fichiers DOCX MS Word (cela fonctionnera aussi bien que LibreOffice est capable de gérer l'ODT particulier) et, en général, tous les types de fichiers que LibreOffice peut ouvrir.

  2. Je ne pense pas qu'il y ait un binaire nommé libreofficecomme l'une des autres réponses suggérées. Cependant, il existe soffice(.bin)- le binaire qui peut être utilisé pour démarrer LibreOffice à partir de la ligne de commande. Il est généralement situé dans /usr/lib/libreoffice/program/; et très souvent, un lien symbolique /usr/bin/sofficepointe vers cet endroit.

  3. Ensuite, dans la plupart des cas, les paramètres --headless --convert-to pdfne sont pas suffisants. Il doit être:

    --headless --convert-to pdf:writer_pdf_Export
    

    Assurez-vous de suivre exactement cette capitalisation!

  4. Ensuite, la commande ne fonctionnera pas si une instance d’interface graphique LibreOffice est déjà opérationnelle sur votre système. Il est causé par le bogue n ° 37531, connu depuis 2011 . Ajoutez ce paramètre supplémentaire à votre commande:

     "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
    

    Cela créera un nouvel environnement séparé qui pourra être utilisé par une seconde instance LO sans en-tête sans interférer avec une première instance en cours d'exécution éventuellement créée par le même utilisateur.

  5. Assurez-vous également que le fichier que --outdir /pdfvous spécifiez existe et que vous disposez de l'autorisation en écriture. Ou utilisez plutôt un répertoire de sortie différent. Même si ce n'est que pour un premier tour de test et de débogage:

    $ mkdir ${HOME}/lo_pdfs
    
  6. Par conséquent:

    /path/to/soffice                                                     \
      --headless                                                         \
      "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}" \
      --convert-to pdf:writer_pdf_Export                                 \
      --outdir ${HOME}/lo_pdfs                                           \
    /path/to/test.docx
    

    Cela fonctionne pour moi sur Mac OS X Yosemite 10.10.5 avec LibreOffice v5.1.2.2 (en utilisant mon chemin spécifique pour le binaire sofficequi sera différent sur Ubuntu de toute façon ...). Cela fonctionne aussi sur Debian Jessie 8.0 (en utilisant path /usr/lib/libreoffice/program/soffice). Désolé, je ne peux pas le tester sur Ubuntu pour le moment ....

    Si tout cela ne fonctionne pas, lorsque vous essayez de traiter DOCX:

  7. Cela peut être un problème avec le fichier DOCX spécifique avec lequel vous essayez la commande ... Créez donc d'abord un document DOCX très simple. Utilisez LibreOffice pour cela. Ecrivez "Hello World!" sur une page par ailleurs vide. Enregistrez-le en tant que DOCX.

  8. Réessayer. Est-ce que ça marche avec le simple DOCX?

  9. Si cela ne fonctionne pas à nouveau, répétez l'étape 7, mais enregistrez-le au format ODT cette fois.

  10. Répétez l'étape 8, mais veillez à référencer l'ODT cette fois-ci.

  11. Last: utilise le chemin complet vers soffice, vers soffice.binet vers libreofficeet exécute chacun avec le -hparamètre:

    $ /path/to/libreoffice -h  # if that path exists, which I doubt!
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Avez-vous une sortie ici?
    • Pour lequel des trois binaires / liens symboliques?
    • Enregistrez les sorties.
    • Dites-nous vos sorties !!!
       

    Comparez-les à la ligne de commande que vous avez utilisée:

    • Y at-il des changements dans les noms de paramètres, les majuscules, le nombre de tirets utilisés, etc.
       

    À titre de comparaison, ma propre sortie (Mac OS X) est ici:

     $ /Applications/LibreOffice.app/Contents/MacOS/soffice -h 
    
     LibreOffice 5.1.2.2 d3bf12ecb743fc0d20e0be0c58ca359301eb705f
    
     Usage: soffice [options] [documents...]
    
     Options:
     --minimized    keep startup bitmap minimized.
     --invisible    no startup screen, no default document and no UI.
     --norestore    suppress restart/restore after fatal errors.
     --quickstart   starts the quickstart service
     --nologo       don't show startup screen.
     --nolockcheck  don't check for remote instances using the installation
     --nodefault    don't start with an empty document
     --headless     like invisible but no user interaction at all.
     --help/-h/-?   show this message and exit.
     --version      display the version information.
     --writer       create new text document.
     --calc         create new spreadsheet document.
     --draw         create new drawing.
     --impress      create new presentation.
     --base         create new database.
     --math         create new formula.
     --global       create new global document.
     --web          create new HTML document.
     -o             open documents regardless whether they are templates or not.
     -n             always open documents as new files (use as template).
    
     --display <display>
           Specify X-Display to use in Unix/X11 versions.
     -p <documents...>
           print the specified documents on the default printer.
     --pt <printer> <documents...>
           print the specified documents on the specified printer.
     --view <documents...>
           open the specified documents in viewer-(readonly-)mode.
     --show <presentation>
           open the specified presentation and start it immediately
     --accept=<accept-string>
           Specify an UNO connect-string to create an UNO acceptor through which
           other programs can connect to access the API
     --unaccept=<accept-string>
           Close an acceptor that was created with --accept=<accept-string>
           Use --unnaccept=all to close all open acceptors
     --infilter=<filter>[:filter_options]
           Force an input filter type if possible
           Eg. --infilter="Calc Office Open XML"
               --infilter="Text (encoded):UTF8,LF,,,"
     --convert-to output_file_extension[:output_filter_name[:output_filter_options]] [--outdir output_dir] files
           Batch convert files (implies --headless).
           If --outdir is not specified then current working dir is used as output_dir.
           Eg. --convert-to pdf *.doc
               --convert-to pdf:writer_pdf_Export --outdir /home/user *.doc
               --convert-to "html:XHTML Writer File:UTF8" *.doc
               --convert-to "txt:Text (encoded):UTF8" *.doc
     --print-to-file [-printer-name printer_name] [--outdir output_dir] files
           Batch print files to file.
           If --outdir is not specified then current working dir is used as output_dir.
           Eg. --print-to-file *.doc
               --print-to-file --printer-name nasty_lowres_printer --outdir /home/user *.doc
     --cat files
           Dump text content of the files to console
           Eg. --cat *.odt
     --pidfile=file
           Store soffice.bin pid to file.
     -env:<VAR>[=<VALUE>]
           Set a bootstrap variable.
           Eg. -env:UserInstallation=file:///tmp/test to set a non-default user profile path.
    
     Remaining arguments will be treated as filenames or URLs of documents to open.
    
  12. Ajoutez un argument de plus à votre ligne de commande pour appliquer l'application d'un filtre d'entrée lors de l' sofficeouverture de votre fichier DOCX:

    --infilter="Microsoft Word 2007/2010/2013 XML"
    

    ou

    --infilter="Microsoft Word 2007/2010/2013 XML"
    --infilter="Microsoft Word 2007-2013 XML"
    --infilter="Microsoft Word 2007-2013 XML Template"
    --infilter="Microsoft Word 95 Template"
    --infilter="MS Word 95 Vorlage"
    --infilter="Microsoft Word 97/2000/XP Template"
    --infilter="MS Word 97 Vorlage"
    --infilter="Microsoft Word 2003 XML"
    --infilter="MS Word 2003 XML"
    --infilter="Microsoft Word 2007 XML Template"
    --infilter="MS Word 2007 XML Template"
    --infilter="Microsoft Word 6.0"
    --infilter="MS WinWord 6.0"
    --infilter="Microsoft Word 95"
    --infilter="MS Word 95"
    --infilter="Microsoft Word 97/2000/XP"
    --infilter="MS Word 97"
    --infilter="Microsoft Word 2007 XML"
    --infilter="MS Word 2007 XML"
    --infilter="Microsoft WinWord 5"
    --infilter="MS WinWord 5"
    
Kurt Pfeifle
la source
fwiw, le bogue 37531 de tdf a été marqué en tant que résolu / corrigé
myrdd
4

Script Nautilus

Ce script utilise libreoffice pour convertir les fichiers compatibles avec LibreOffice au format PDF.

#!/bin/bash
## PDFconvert 0.1
## by Glutanimate (https://askubuntu.com/users/81372/)
## License: GPL 3.0
## depends on python, libreoffice
## Note: if you are using a non-default LO version (e.g. because you installed it 
## from a precompiled package instead of the official repos) you might have to change
## 'libreoffice' according to the version you're using, e.g. 'libreoffice3.6'

# Get work directory
base="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`"

#Convert documents
while [ $# -gt 0 ]; do
    document=$1
    libreoffice --headless --invisible --convert-to pdf --outdir "$base" "$document" 
    shift

done

Pour les instructions d'installation, voir ici: Comment puis-je installer un script Nautilus?

Glutanimate
la source
2
J'espère juste qu'une fonction telle que "lipreoffice" serait aussi dans OSX. Parfois, je sens mes mains si courtes lorsque je dois utiliser Mac.
Léo Léopold Hertz 준영
2

Remarque: j'ai décidé de supprimer ma réponse de cette question et d'en publier une version modifiée ici lorsque j'ai réalisé que unoconvcela ne gère pas bien les pswfichiers et ne les convertit pas avec succès en d'autres formats. Il peut également y avoir des problèmes avec docxet xlsxformats.


Cependant, Libreofficesupporte pleinement de nombreux types de fichiers; Une documentation complète est disponible sur le site officiel, qui détaille les formats d'entrée et de sortie valides.

Vous pouvez utiliser l' libreofficeutilitaire de conversion de ligne de commande ou unoconv , disponible dans les référentiels. Je trouve unoconvcela très utile, et c'est probablement ce que vous voulez. Bien que Takkat l’ ait brièvement mentionné unoconv, j’ai pensé qu’il serait utile de donner quelques détails supplémentaires et une conversion par lots à une ligne.

En utilisant le terminal, vous pouvez cdaccéder au répertoire contenant vos fichiers, puis les convertir par lots en exécutant une ligne comme celle-ci:

for f in *.odt; do unoconv -f pdf "${f/%pdf/odt}"; done

(Ce one-liner est une modification de mon script de traduction présenté dans cette réponse .)

Si vous souhaitez utiliser ultérieurement un autre format de fichier, remplacez simplement le odtet pdfpar tous les autres formats d'entrée et de sortie pris en charge. Vous pouvez trouver les formats pris en charge pour un type de fichier en entrant unoconv -f odt --show. Pour convertir un seul fichier, utilisez, par exemple unoconv -f pdf myfile.odt,.

Pour plus d’informations sur le programme et les options disponibles, entrez-vous dans le terminal man unoconvou consultez les pages de manuel Ubuntu en ligne .

Communauté
la source
1

Un autre script Nautilus

Ce script très simple et léger utilisé unoconvpar Nautilus convertit les fichiers sélectionnés compatibles avec LibreOffice au format PDF:

#!/bin/sh
#Nautilus Script to convert selected LibreOffice-compatible file(s) to PDF
#
OLDIFS=$IFS
IFS="
"
for filename in $@; do
unoconv --doctype=document --format=pdf "$filename"
done
IFS=$OLDIFS
Sadi
la source
1

J'ajoute une nouvelle réponse, car Pandoc a récemment ouvert une série de nouveaux chemins de conversion lui permettant de lire les fichiers ODT.

Lorsque Pandoc lit dans un format de fichier, il le convertit en un format interne, "natif" (qui est une forme de JSON).

À partir de sa forme native, il peut ensuite exporter le document dans toute une gamme d'autres formats. Non seulement PDF, mais aussi DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki et ce qui ne l'est pas ...

Le format de sortie souhaité étant ici le format PDF, nous avons un autre choix de chemins différents, fournis par ce que Pandoc appelle un moteur PDF . Voici la liste des moteurs PDF actuellement disponibles (valide pour Pandoc v2.7.2 et versions ultérieures - les versions précédentes peuvent ne prendre en charge qu'une liste plus petite):

  • pdflatex: Ceci nécessite l'installation de LaTeX en plus de Pandoc.

  • xelatex: Ceci nécessite l' installation de XeLaTeX en plus de Pandoc (également disponible en tant que paquet supplémentaire pour les distributions TeX générales ).

  • contexte: Ceci nécessite l'installation de ConTeXt en plus de Pandoc; ConTeXt est disponible en tant que paquet supplémentaire pour la plupart des distributions TeX générales .

  • lualatex: Cela nécessite LuaTeX être installé en plus de Pandoc (également disponible en paquet supplémentaire générales distributions TeX ).

  • pdfroff: Cela nécessite l'installation de GNU Roff en plus de Pandoc.

  • wkhtml2pdf: Ceci nécessite l' installation de wkhtmltopdf en plus de Pandoc.

  • Prince: Cela nécessite PrinceXML à installer en plus Pandoc.

  • weasyprint: Cela nécessite l' installation de weasyprint en plus de Pandoc.

Il existe maintenant d'autres moteurs PDF, plus récents, intégrés à Pandoc, que je n'ai pas encore utilisés moi-même et que je ne peux actuellement pas décrire plus en détail: tectonic et latexmk .

AVERTISSEMENT: Ne vous attendez pas à ce que l'apparence de votre document d'origine soit identique dans toutes les sorties PDF à l'aperçu avant impression ou à l'exportation PDF de l'ODT! Pandoc, lorsque la conversion ne conserve pas les mises en page , il conserve le contenu et la structure des documents: les paragraphes restent des paragraphes, les mots mis en évidence restent soulignés, les en-têtes restent les en-têtes, etc. Mais l'apparence générale peut changer considérablement.

Exemple de commandes

pdflatex:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdflatex

XeLaTeX:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=xelatex

LuaLaTeX:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=lualatex

Le contexte:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=context

GNU troff:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdfroff

wkhtmltopdf:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=wkhtml2pdf

PrinceXML:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=prince

weasyprint:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=weasyprint

Les commandes ci-dessus sont les plus élémentaires pour la conversion. Selon le moteur de PDF que vous choisissez, de nombreuses autres options sont possibles pour contrôler l'apparence du fichier PDF de sortie. Par exemple, les paramètres supplémentaires suivants peuvent être ajoutés à tous ces chemins d'acheminement via LaTeX:

 -V geometry:"paperwidth=23.3cm, paperheight=1000pt, margin=11.2mm, top=2cm"

qui utilisera un format de page personnalisé (un peu plus grand que DIN A4) avec des marges de 2 cm sur le bord supérieur et de 1,12 cm sur les trois autres bords).

Kurt Pfeifle
la source
S'il vous plaît vérifier le quatrième para à partir du haut. Cela semble incomplet.
DK Bose
@DKBose: Thx, c'est fait.
Kurt Pfeifle