Antworten:
Öffnen Sie einfach das Dokument mit libre office und wählen Sie Als PDF exportieren ... :
Für eine Befehlszeilenlösung gibt es unoconv , 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).
unoconv
, es ist großartig!
unoconv: Cannot find a suitable office installation on your system.
, daher ist es unbrauchbar :(
Sie können auch die Befehlszeile von libreoffice
fü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
--env:UserInstallation=file:///path/to/some/directory
.
unoconv
. Zum Beispiel habe ich die Leitung unoconv -f pdf *.ppt
erfolgreich benutzt.
Im Folgenden finden Sie einige Details zur Methode "Nicht-GUI".
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.
Ich glaube nicht, dass es eine Binärdatei gibt, die libreoffice
als 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/soffice
verweist ein Symlink auf diesen Ort.
In den meisten Fällen --headless --convert-to pdf
reichen die Parameter dann nicht aus. Es muss sein:
--headless --convert-to pdf:writer_pdf_Export
Beachten Sie genau diese Groß- und Kleinschreibung!
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.
Stellen --outdir /pdf
Sie 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
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, soffice
der 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:
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.
Versuch es noch einmal. Funktioniert es mit der einfachen DOCX?
Wenn es erneut nicht funktioniert, wiederholen Sie Schritt 7, aber speichern Sie diesmal als ODT.
Wiederholen Sie Schritt 8, achten Sie jedoch darauf, diesmal auf das ODT zu verweisen.
Last: Verwenden Sie den vollständigen Pfad zu soffice
, zu soffice.bin
und zu libreoffice
und führen Sie jeden mit dem folgenden -h
Parameter aus:
$ /path/to/libreoffice -h # if that path exists, which I doubt!
$ /path/to/soffice -h
$ /path/to/soffice.bin -h
Vergleichen Sie sie mit der Befehlszeile, die Sie verwendet haben:
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.
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"
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?
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 unoconv
sich psw
Dateien überhaupt nicht gut verarbeiten lassen und nicht erfolgreich in andere Formate konvertiert werden können. Es kann auch Probleme mit docx
und xlsx
Formaten geben.
Allerdings Libreoffice
unterstü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 libreoffice
oder Unoconv verwenden , das in den Repositorys verfügbar ist. Ich finde unoconv
es 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 cd
in 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 odt
und pdf
durch 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 unoconv
oder auf den Online-Hilfeseiten von Ubuntu .
Dieses sehr einfache und leichte Nautilus-Skript unoconv
konvertiert 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
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.
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.