web-dev-qa-db-fra.com

La commande `libreoffice --headless --convert-to pdf test.docx --outdir/pdf` ne fonctionne pas

Je dois attendre longtemps après avoir utilisé cette commande LibreOffice destinée à convertir DOCX en PDF:

libreoffice --headless --convert-to pdf test.docx --outdir /pdf

Mais je n'obtiens aucune réponse et aucune erreur. Aucun fichier n'est converti. On dirait que le terminal est suspendu.

Alors, y at-il un moyen de suivre l'erreur?

47
vishal
  1. Je voudrais d’abord l’essayer en donnant des chemins absolus à la commande.

  2. Je soupçonne que le binaire libreoffice ne fonctionne pas - vous devez localiser le binaire soffice et voir si cela fonctionne.

  3. Ensuite, votre --convert-to pdf n'est pas suffisant. Il doit être:

    --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. Elle est causée par un bug 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 --outdir /pdf que vous spécifiez existe et que vous y avez le droit d'écriture. Ou utilisez plutôt un répertoire de sortie différent. Même si ce n'est que pour les premiers tests et cette ronde 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 Mavericks 10.9.5 avec LibreOffice v4.4.3.2 (en utilisant mon chemin spécifique pour la binaire soffice qui sera différente pour vous de toute façon ...).

    Si tout cela ne fonctionne pas:

  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 lui-même pour cela. Ecrivez "Hello World!" sur une page par ailleurs vide. Enregistrez-le en tant que DOCX.

  8. Réessayer. Cela fonctionne-t-il 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: utilisez le chemin complet de soffice, de soffice.bin et de libreoffice et exécutez-les avec le paramètre -h:

    $ /path/to/libreoffice -h
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Avez-vous même 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 a-t-il des changements dans les noms de paramètre, les majuscules, le nombre de tirets utilisés, etc.

    Pour comparaison, ma propre sortie est ici:

    $ /Applications/LibreOffice.app/Contents/MacOS/soffice -h
    
      LibreOffice 4.4.3.2 88805f81e9fe61362df02b9941de8e38a9b5fd16
    
      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 userinteraction 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.
            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 supplémentaire à votre ligne de commande pour appliquer l'application d'un filtre d'entrée lorsque soffice ouvre 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"
    

Mettre à jour

LibreOffice ne peut convertir que DOCX en PDF sur la ligne de commande:

  • Il peut traiter le format d'entrée tout type qu'il peut ouvrir et "lire": DOC, XLS, XLSX, PPT, PPTX, ...
  • Il peut convertir au format de sortie indifférent qu'il peut "écrire": DOC, XLS, XLSX, PPT, PPTX, ...

Bien sûr, les résultats ne seront jamais parfaits, et parfois ils seront même inacceptables pour vous.

Re. sortie comme PDF:

Pour contrôler quel composant LibreOffice génère une sortie PDF, vous pouvez utiliser ces variantes:

--convert-to pdf:writer_pdf_Export
--convert-to pdf:calc_pdf_Export
--convert-to pdf:draw_pdf_Export
--convert-to pdf:impress_pdf_Export
--convert-to pdf:writer_web_pdf_Export

Re. entrée qui est pas DOCX:

Pour appliquer des infiltres aux formats d’entrée non-DOCX, vous pouvez utiliser (la liste n’est pas complète):

--infilter="HTML Document"                      # for HTML input
--infilter="MediaWiki"                          # for MediaWiki input
--infilter="Text CSV"                           # for CSV spreadsheet input
--infilter="Microsoft PowerPoint 2007/2010 XML" # for PPTX input
--infilter="Microsoft PowerPoint 97/2000/XP"    # for PPT input
--infilter="Windows Metafile"                   # for WMF input
--infilter="Enhanced Metafile"                  # for EMF input
--infilter="Scalable Vector Graphics"           # for SVG input
--infilter="Microsoft Excel 2007/2010 XML"      # for XLSX input
--infilter="Microsoft Excel 97/2000/XP"         # for XLS input
--infilter="Microsoft Excel 95"                 # for some XLS input
--infilter="Microsoft Excel 5.0"                # for some XLS input

Re. sortie qui est pas PDF:

Pour convertir des formats de sortie spécifiques, vous pouvez utiliser (liste non complète):

--convert-to html:HTML
--convert-to html:draw_html_Export                 # force "Draw" to generate the HTML
--convert-to mediawiki:MediaWiki_Web               # generate MediaWiki output
--convert-to csv:"Text - txt - csv (StarCalc)"     # generate CSV spreadsheet output
--convert-to pptx:"Impress MS PowerPoint 2007 XML" # generate PPTX
--convert-to ppt:"MS PowerPoint 97"                # generate PPT
--convert-to wmf:impress_wmf_Export                # force "Impress" to generate the WMF
--convert-to wmf:draw_wmf_Export                   # force "Draw" to generate the WMF
--convert-to emf:impress_emf_Export                # force "Impress" to generate the EMF
--convert-to emf:draw_emf_Export                   # force "Draw" to generate the EMF
--convert-to svg:impress_svg_Export                # force "Impress" to generate the SVG
--convert-to svg:draw_svg_Export                   # force "Draw" to generate the SVG
--convert-to xlsx:"Calc MS Excel 2007 XML"         # generate XLSX
--convert-to xls:"MS Excel 97"                     # generate XLS like Excel 97
--convert-to xls:"MS Excel 95"                     # generate XLS like Excel 95
--convert-to xls:"MS Excel 5.0/95"                 # generate XLS like Excel 5.0/95
79
Kurt Pfeifle

Cela peut paraître stupide, mais j’en ai très peu souffert: sous Ubuntu 14.04, il ne suffit pas d’installer uniquement le paquet libreoffice-core ou -common pour convertir au format PDF, vous devez installer libreoffice-writer à la place/en plus. La chose importante à noter est que libreoffice-core | common semble apporter une base fonctionnelle libreoffice, d'où son nom ;-), qui ne commet pas d'erreur s'il est exécuté pour convertir un fichier, mais semble plutôt attendre sur une socket. ou tel pour une entrée ou quoi que ce soit ... Après avoir installé libreoffice-writer, qui a pour principe -core | common en tant que dépendance, la conversion d'un fichier ODT en PDF a fonctionné comme un charme avec la même ligne de commande qu'avant.

Cela semble un peu fou que l'application semble fonctionner d'une manière ou d'une autre, mais ne pourrait tout simplement pas à cause de paquets manquants, et n'en dit rien.

4

J'utilise aussi LibreOffice 4.2.8.2 (sous GNU/Linux), mais j'ai essayé de convertir un fichier DOC en un fichier HTML. J'ai installé libreoffice-headless, mais le terminal était également suspendu. J'ai essayé chaque balle de Kurt Pfeifle, mais ça ne marchait pas…

La solutionétait simple: installer libreoffice-writer (peut-être que libreoffice-filters convient également, mais cela dépend de libreoffice-writer et des autres gros composants de LibreOffice).

J'espère que cela aidera.

0
Linkid