Wie kann ich eine ODT-Datei in eine PDF-Datei konvertieren?

Antworten:

68

Öffnen Sie einfach das Dokument mit libre office und wählen Sie Als PDF exportieren ... :

Bildbeschreibung hier eingeben

Für eine Befehlszeilenlösung gibt es unoconv Installieren Sie NAME , das Dateien von der Befehlszeile konvertiert:

unoconv -f pdf mydocument.odt

Hinweis: Nur ab Ubuntu 11.10 hängt Unoconv von Libre Office ab. Frühere Unoconv-Versionen (von Ubuntu <= 11.04) hängen von Open Office ab (laufen aber auch mit Libre Office).

Takkat
quelle
3
Danke für die Erwähnung unoconv, es ist großartig!
Boris Däppen
1
für diejenigen fragen , was Vor- und Nachteile von Unoconv vs Libreoffice - Befehlszeile ist, kann dieses Problem helfen: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber
@Takkat unoconv scheint libreoffice5 nicht auf MacOS Sierra zu finden, heißt es unoconv: Cannot find a suitable office installation on your system., daher ist es unbrauchbar :(
SebMa
87

Sie können auch die Befehlszeile von libreofficefür Ihren Zweck verwenden. Das gibt Ihnen den Vorteil der Batch-Konvertierung. Es sind aber auch einzelne Dateien möglich. In diesem Beispiel werden alle ODT-Dateien im aktuellen Verzeichnis in PDF konvertiert:

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

Weitere Informationen zu Befehlszeilenoptionen erhalten Sie mit:

man libreoffice
Tapper
quelle
Ein weiteres Argument für die Verwendung der Befehlszeile ist, dass in meinem Fall die GUI plötzlich fehlerhafte PDF-Dateien erstellt, die Befehlszeile jedoch immer noch wie ein Zauber funktioniert.
Hermann Ingjaldsson
4
Dies funktioniert, hat aber ein Problem: Wenn die GUI geöffnet ist, führt der Befehl nichts aus (es wird nicht einmal ein Fehler angezeigt). Hässlich, aber mit dieser Problemumgehung können Sie eine neue Instanz öffnen: --env:UserInstallation=file:///path/to/some/directory.
Tokland
1
@tokland: Dafür gibt es einen Fehlerbericht: bugs.freedesktop.org/show_bug.cgi?id=37531
Mechanische Schnecke
1
Ich habe es auch geschafft, Batch-Konvertierung mit zu bekommen unoconv. Zum Beispiel habe ich die Leitung unoconv -f pdf *.ppterfolgreich benutzt.
XavierStuvw
2
für diejenigen fragen , was Vor- und Nachteile von Unoconv vs Libreoffice - Befehlszeile ist, kann dieses Problem helfen: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber
8

Im Folgenden finden Sie einige Details zur Methode "Nicht-GUI".

  1. Mit dieser Methode können Sie nicht nur ODT-Dateien in PDF konvertieren. Es funktioniert auch für MS Word DOCX-Dateien (es funktioniert ebenso wie LibreOffice mit dem jeweiligen ODT umgehen kann) und im Allgemeinen für alle Dateitypen, die LibreOffice öffnen kann.

  2. Ich glaube nicht, dass es eine Binärdatei gibt, die libreofficeals eine der anderen vorgeschlagenen Antworten bezeichnet wird. Es gibt jedoch soffice(.bin)- die Binärdatei, mit der LibreOffice über die Befehlszeile gestartet werden kann. Es befindet sich normalerweise in /usr/lib/libreoffice/program/; und sehr oft /usr/bin/sofficeverweist ein Symlink auf diesen Ort.

  3. In den meisten Fällen --headless --convert-to pdfreichen die Parameter dann nicht aus. Es muss sein:

    --headless --convert-to pdf:writer_pdf_Export
    

    Beachten Sie genau diese Groß- und Kleinschreibung!

  4. Als nächstes funktioniert der Befehl nicht, wenn auf Ihrem System bereits eine LibreOffice-GUI-Instanz ausgeführt wird. Es wird durch den Fehler # 37531 verursacht, der seit 2011 bekannt ist . Fügen Sie Ihrem Befehl diesen zusätzlichen Parameter 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 ausgeführte erste GUI-LO-Instanz zu beeinträchtigen, die von demselben Benutzer gestartet wurde.

  5. Stellen --outdir /pdfSie außerdem sicher, dass das von Ihnen angegebene vorhanden ist und Sie über Schreibberechtigung verfügen. Oder verwenden Sie lieber ein anderes Ausgabeverzeichnis. Auch wenn es sich nur um eine erste Test- und Debugging-Runde handelt:

    $ 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 Yosemite 10.10.5 mit LibreOffice v5.1.2.2 (unter Verwendung meines spezifischen Pfads für die Binärdatei, sofficeder unter Ubuntu ohnehin anders sein wird ...). Es funktioniert auch unter Debian Jessie 8.0 (mit path /usr/lib/libreoffice/program/soffice). Es tut uns leid, ich kann es momentan nicht auf Ubuntu testen.

    Wenn dies alles nicht funktioniert, wenn Sie versuchen, DOCX zu verarbeiten:

  7. Möglicherweise liegt ein Problem mit der spezifischen DOCX-Datei vor, mit der Sie den Befehl ausführen ... Erstellen Sie also zuerst ein sehr einfaches DOCX-Dokument. Verwenden Sie dazu LibreOffice. Schreiben Sie "Hallo Welt!" auf einer ansonsten leeren Seite. Speichern Sie es als DOCX.

  8. Versuch es noch einmal. Funktioniert es mit der einfachen DOCX?

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

  10. Wiederholen Sie Schritt 8, achten Sie jedoch darauf, diesmal auf das ODT zu verweisen.

  11. Last: Verwenden Sie den vollständigen Pfad zu soffice, zu soffice.binund zu libreofficeund führen Sie jeden mit dem folgenden -hParameter aus:

    $ /path/to/libreoffice -h  # if that path exists, which I doubt!
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Erhalten Sie hier eine Ausgabe?
    • Für welche der drei Binaries / Symlinks?
    • Notieren Sie die Ausgaben.
    • Teilen Sie uns Ihre Ergebnisse mit !!!
       

    Vergleichen Sie sie mit der Befehlszeile, die Sie verwendet haben:

    • Gibt es Änderungen an Parameternamen, Großbuchstaben, Anzahl der verwendeten Striche usw. ??
       

    Zum Vergleich: Meine eigene Ausgabe (Mac OS X) ist hier:

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

    --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"
    
Kurt Pfeifle
quelle
fwiw, tdf bug 37531 wurde als behoben markiert
myrdd
4

Nautilus-Skript

Dieses Skript verwendet libreoffice, um mit LibreOffice kompatible Dateien in PDF zu konvertieren.

#!/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

Installationsanweisungen finden Sie hier: Wie kann ich ein Nautilus-Skript installieren?

Glutanimate
quelle
2
Ich hoffe nur, dass solche Funktionen wie "lipreoffice" auch in OSX verfügbar sind. Manchmal fühle ich meine Hände so kurz, wenn ich einen Mac benutzen muss.
Léo Léopold Hertz 준영
2

Hinweis: Ich habe beschlossen, meine Antwort von dieser Frage zu löschen und hier eine geänderte Version zu veröffentlichen, wenn ich feststellte, dass unoconvsich pswDateien überhaupt nicht gut verarbeiten lassen und nicht erfolgreich in andere Formate konvertiert werden können. Es kann auch Probleme mit docxund xlsxFormaten geben.


Allerdings Libreofficeunterstützt viele Dateitypen; Eine vollständige Dokumentation finden Sie auf der offiziellen Website, in der die gültigen Eingabe- und Ausgabeformate aufgeführt sind.

Sie können das Befehlszeilenkonvertierungsdienstprogramm libreofficeoder Unoconv verwenden , das in den Repositorys verfügbar ist. Ich finde unoconves sehr nützlich, und es ist wahrscheinlich das, was Sie wollen. Obwohl Takkat dies kurz erwähnt hat unoconv, hielt ich es für nützlich, einige Details und einen Batch-Konvertierungs- Einzeiler anzugeben .

Mit dem Terminal können Sie cdin das Verzeichnis wechseln, in dem sich Ihre Dateien befinden, und diese anschließend stapelweise konvertieren, indem Sie einen Einzeiler wie diesen ausführen:

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

(Dieser Einzeiler ist eine Modifikation meines in dieser Antwort vorgestellten Übersetzungsskripts .)

Wenn Sie später andere Dateiformate verwenden möchten, ersetzen Sie einfach das odtund pdfdurch andere unterstützte Eingabe- und Ausgabeformate. Sie finden die unterstützten Formate für einen Dateityp, indem Sie eingeben unoconv -f odt --show. Verwenden Sie zum Konvertieren einer einzelnen Datei beispielsweise unoconv -f pdf myfile.odt.

Weitere Informationen und Optionen für das Programm finden Sie im Terminal man unoconvoder auf den Online-Hilfeseiten von Ubuntu .

Gemeinschaft
quelle
1

Ein weiteres Nautilus-Skript

Dieses sehr einfache und leichte Nautilus-Skript unoconvkonvertiert ausgewählte Dateien, die mit LibreOffice kompatibel sind, in das PDF-Format:

#!/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
quelle
1

Ich füge eine neue Antwort hinzu, da Pandoc in letzter Zeit eine Reihe neuer Konvertierungspfade eröffnet hat, mit denen ODT-Dateien gelesen werden können.

Wenn Pandoc ein Dateiformat liest, konvertiert es es in ein internes Format, "native" (eine Form von JSON).

Von seiner ursprünglichen Form aus kann es das Dokument dann in eine ganze Reihe anderer Formate exportieren. Nicht nur PDF, sondern auch DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki und was-nicht ...

Da hier das gewünschte Ausgabeformat PDF ist, haben wir eine andere Auswahl an verschiedenen Pfaden, die von Pandoc als PDF-Engine bezeichnet werden . Hier ist die Liste der derzeit verfügbaren PDF-Engines (gültig für Pandoc v2.7.2 und höher - frühere Versionen unterstützen möglicherweise nur eine kleinere Liste):

  • pdflatex: Dazu muss zusätzlich zu Pandoc LaTeX installiert sein.

  • xelatex: Hierfür muss zusätzlich zu Pandoc XeLaTeX installiert sein (auch als Zusatzpaket für allgemeine TeX-Distributionen verfügbar ).

  • Kontext: Hierfür muss ConTeXt zusätzlich zu Pandoc installiert sein. ConTeXt ist als Zusatzpaket zu den meisten allgemeinen TeX-Distributionen erhältlich .

  • lualatex: Hierfür muss zusätzlich zu Pandoc LuaTeX installiert sein (auch als Zusatzpaket für allgemeine TeX-Distributionen erhältlich ).

  • pdfroff: Dazu muss zusätzlich zu Pandoc GNU Roff installiert sein.

  • wkhtml2pdf: Dazu muss wkhtmltopdf zusätzlich zu Pandoc installiert sein.

  • prince: Dies setzt voraus , dass PrinceXML zusätzlich zu Pandoc installiert ist.

  • weasyprint: Dazu muss weasyprint zusätzlich zu Pandoc installiert sein.

In Pandoc sind einige weitere und neuere PDF-Engines integriert, die ich selbst noch nicht verwendet habe und die ich derzeit nicht näher beschreiben kann: tectonic und latexmk .

WARNUNG: Erwarten Sie nicht, dass das Erscheinungsbild Ihres Originaldokuments in allen PDF-Ausgaben mit der Druckvorschau oder dem PDF-Export des ODT identisch ist! Pandoc behält beim Konvertieren keine Layouts , sondern nur den Inhalt und die Struktur von Dokumenten bei: Absätze bleiben Absätze, hervorgehobene Wörter bleiben hervorgehoben, Überschriften bleiben Überschriften usw. Das allgemeine Erscheinungsbild kann sich jedoch erheblich ändern.

Beispielbefehle

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

Kontext:

 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

Die obigen Befehle sind die grundlegendsten für die Konvertierung. Abhängig von der ausgewählten PDF-Engine gibt es möglicherweise viele andere Optionen, mit denen Sie das Erscheinungsbild der PDF-Ausgabedatei steuern können. Beispielsweise können die folgenden zusätzlichen Parameter zu allen Pfaden hinzugefügt werden, die über LaTeX geleitet werden:

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

Hierfür wird ein benutzerdefiniertes Seitenformat (etwas größer als DIN A4) mit einem Rand von 2 cm an der oberen Kante und 1,12 cm an den anderen drei Kanten verwendet.

Kurt Pfeifle
quelle
Bitte überprüfen Sie den vierten Absatz von oben. Es erscheint unvollständig.
DK Bose
@DKBose: Danke, fertig.
Kurt Pfeifle