it-swarm.com.de

Der Befehl `libreoffice --headless --convert-to pdf test.docx --outdir/pdf` funktioniert nicht

Ich muss lange warten, nachdem ich diesen LibreOffice-Befehl verwendet habe, der DOCX in PDF konvertieren soll:

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

Aber ich bekomme keine Antwort und keinen Fehler. Es wird keine Datei konvertiert. Es sieht aus, als hinge das Terminal.

Gibt es eine Möglichkeit, den Fehler zu verfolgen?

47
vishal
  1. Ich würde es zunächst einmal mit absoluten Pfaden versuchen.

  2. Ich vermute, dass die libreoffice-Binärdatei nicht funktioniert - Sie müssen die soffice-Binärdatei suchen und sehen, ob das funktioniert.

  3. Ihr --convert-to pdf reicht dann nicht aus. Es muss sein:

    --convert-to pdf:writer_pdf_Export
    

    Folgen Sie genau dieser Großschreibung!

  4. Als Nächstes funktioniert der Befehl nicht, wenn bereits eine LibreOffice-GUI-Instanz auf Ihrem System ausgeführt wird. Ursache ist ein Fehler seit 2011 bekannt . Fügen Sie diesen zusätzlichen Parameter zu Ihrem Befehl hinzu:

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

    Dadurch wird eine neue, separate Umgebung erstellt, die von einer zweiten, kopflosen LO-Instanz verwendet werden kann, ohne eine möglicherweise laufende erste GUI-LO-Instanz zu beeinträchtigen, die von demselben Benutzer gestartet wird.

  5. Stellen Sie außerdem sicher, dass der von Ihnen angegebene --outdir /pdf vorhanden ist und Sie über Schreibberechtigung verfügen. Oder verwenden Sie lieber ein anderes Ausgabeverzeichnis. Auch wenn es nur für den ersten Test und diese Debugging-Runde ist:

    $ mkdir ${HOME}/lo_pdfs
    
  6. Daher:

    /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
    

    Dies funktioniert für mich unter Mac OS X Mavericks 10.9.5 mit LibreOffice v4.4.3.2 (unter Verwendung meines spezifischen Pfads für die Binärvariable soffice, die für Sie anders sein wird ...).

    Wenn das alles nicht klappt:

  7. Es kann ein Problem mit der spezifischen DOCX-Datei sein, mit der Sie den Befehl mit ... versuchen. Erstellen Sie also zunächst ein sehr einfaches DOCX-Dokument. Verwenden Sie dazu LibreOffice. Schreibe "Hallo Welt!" auf einer ansonsten leeren Seite. Speichern Sie es als DOCX.

  8. Versuchen Sie es nochmal. Funktioniert es mit dem einfachen DOCX?

  9. Wenn es erneut nicht funktioniert, wiederholen Sie Schritt 7, speichern Sie diesmal jedoch als ODT.

  10. Wiederholen Sie Schritt 8, aber verweisen Sie diesmal unbedingt auf den ODT.

  11. Last: Verwenden Sie den vollständigen Pfad zu soffice, zu soffice.bin und zu libreoffice und führen Sie jeden mit dem -h-Parameter aus:

    $ /path/to/libreoffice -h
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Bekommst du hier sogar eine Ausgabe?
    • Für welches der drei Binaries/Symlinks?
    • Notieren Sie die Ausgänge.
    • Erzählen Sie uns Ihre Ausgaben !!! 

    Vergleichen Sie sie mit der von Ihnen verwendeten Befehlszeile:

    Gibt es Änderungen bei Parameternamen, Großschreibung, Anzahl der verwendeten Bindestriche usw.?

    Zum Vergleich ist meine eigene Ausgabe hier:

    $ /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. Fügen Sie Ihrer Befehlszeile ein weiteres Argument hinzu, um die Anwendung eines Eingabefilters zu erzwingen, wenn soffice Ihre DOCX-Datei öffnet:

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

    oder

    --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"
    

Aktualisieren

LibreOffice kann DOCX nicht nur in der Befehlszeile in PDF konvertieren:

  • Es kann any Eingabeformate verarbeiten, die es öffnen und "lesen" kann: DOC, XLS, XLSX, PPT, PPTX, ...
  • Es kann in das Ausgabeformat any konvertiert werden, das es "schreiben" kann: DOC, XLS, XLSX, PPT, PPTX, ...

Natürlich werden die Ergebnisse nie perfekt sein und manchmal sogar für Sie unannehmbar sein.

Re. Ausgabe als PDF:

Um zu steuern, welche LibreOffice-Komponente PDF Ausgabe generiert, können Sie die folgenden Varianten verwenden:

--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. Eingabe, die nicht DOCX ist:

Zum Erzwingen von Infiltern für Nicht-DOCX-Eingabeformate können Sie Folgendes verwenden (Liste ist nicht vollständig):

--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. Ausgabe mit nicht PDF:

Um in bestimmte Ausgabeformate zu konvertieren, können Sie (Liste nicht vollständig) verwenden:

--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

Das klingt vielleicht dumm, aber ich litt darunter: In Ubuntu 14.04 reicht es nicht aus, nur das Paket libreoffice-core oder -common für die Konvertierung in PDF zu installieren. Stattdessen muss zusätzlich libreoffice-writer installiert werden. Das Wichtigste ist, dass libreoffice-core | common eine funktionale libreoffice-Basis enthält, daher der Name ;-), der nicht fehlerhaft ist, wenn er ausgeführt wird, um eine Datei zu konvertieren, sondern stattdessen nur auf einen Socket wartet oder so für die Eingabe oder was auch immer ... Nachdem ich libreoffice-writer installiert hatte, der häufig als Abhängigkeit fungiert, funktionierte das Konvertieren einiger ODT-Dateien in PDF wie ein Charm mit der gleichen Befehlszeile wie zuvor.

Scheint ein bisschen verrückt, dass die Anwendung so aussieht, als würde sie irgendwie funktionieren, könnte aber aufgrund fehlender Pakete einfach nie sein und sagt nichts darüber aus.

4

Update

Die aktuelle Version von libreoffice funktioniert: v5.2.6.2 (mac) 

Ich verwende den folgenden Befehl

/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf --outdir . the_file_to_convert

ALT

Es scheint, dass die Konvertierung in einer neueren Version nicht funktioniert (> 4.2.4.2) Ich verwende libreoffice 4.2.4.2 Sie können ältere Versionen von http://downloadarchive.documentfoundation.org/libreoffice herunterladen /old/4.2.4.2/

  • linux (mit dem Deb-Paket):

    libreoffice4.2 --headless --convert-to pdf  myfile.odt
    
  • fenster:

    swriter.exe --headless --convert-to pdf myfile.odt
    
3
lumos0815

Ich verwende auch LibreOffice 4.2.8.2 (unter GNU/Linux), aber ich habe versucht, eine DOC -Datei in eine HTML-Datei zu konvertieren. Ich habe libreoffice-headless installiert, aber das Terminal hing auch. Ich habe jede Kugel von Kurt Pfeifle ausprobiert, aber es hat nicht funktioniert…

Die Lösung war einfach: libreoffice-writer installieren (vielleicht ist libreoffice-filters auch in Ordnung, aber es hängt von libreoffice-writer und den anderen großen Komponenten von LibreOffice ab).

Hoffe das wird helfen.

0
Linkid

Ich hatte das gleiche Problem und blieb einen ganzen Tag lang stecken. albern endete ich, indem ich herausfand, dass ich versuchte, von und zu einem Netzwerkdateisystem zu konvertieren; Auch wenn ich das Recht habe, zu schreiben, scheint libreoffice es nicht zu unterstützen, oder zumindest nicht in meiner Konfiguration.

Ich löste dieses Problem, indem ich nach/tmp konvertierte und die Datei dann von Hand verschob. Ich hoffe es hilft.

0