So konvertieren Sie libreoffice ODT in Bash in PDF

7

Ich verwende libreoffice unter CentOS 6. Ich kann ODT-Dateien in PDF konvertieren mit:

libreoffice --headless --convert-to pdf *.odt Das Problem ist jedoch, dass es nur funktioniert, wenn in libreoffice kein Dokument geöffnet ist.

Wenn ich --env:UserInstallation=file:///path/to/some/directory wie in einem der Kommentare dieser Frage vorgeschlagen spezifiziere , hilft es nicht.

Was mache ich falsch? Es ist lästig, alle libreoffice-Instanzen zu schließen, bevor der Befehl before ausgeführt wird.

Johan
quelle

Antworten:

7

Es ist unwahrscheinlich, dass dies funktioniert, da der Vorschlag im Kommentar sowohl unvollständig (Sie können nicht einfach ein Verzeichnis angeben) als auch falsch ( --env:...sollte es sein) ist -env:... Ich empfehle Ihnen Folgendes:

  1. Stoppen Sie alle Instanzen von libreoffice
  2. Starten Sie libreoffice über die Befehlszeile, ohne Folgendes anzugeben --headless:

    libreoffice -env:UserInstallation=file:///home/username/.config/libreoffice-alt
    

    Sie sollten durch /home/username Ihr Home-Verzeichnis ersetzen (und anpassen, .configwenn Sie das nicht auf Ihrem CentOS haben, habe ich dies unter Ubuntu und Linux Mint getan). Mit dem obigen Befehl wird ein neues Konfigurationsverzeichnis für das alternative libreoffice in Ihrem .config-Verzeichnis erstellt, ohne das Sie eine Fehlermeldung erhalten, dass Java nicht gefunden wird.

  3. Beenden Sie diese Instanz von libreoffice
  4. Dieses Verzeichnis /home/username/.config/libreoffice-alt sollte jetzt für Sie erstellt worden sein.

Starten Sie nun eine weitere libreofficeüber die Befehlszeile (auf diese Weise können Sie einige nützliche Meldungen anzeigen, wenn beim Starten der zweiten Instanz Probleme auftreten), ohne die -env:...und während diese noch ausgeführt wird, starten Sie die Konvertierung mit:

libreoffice -env:UserInstallation=file:///home/username/.config/libreoffice-alt --headless --convert-to pdf *.odt
Anthon
quelle
PS Ich habe .config auch auf CentOS
Johan
Anstatt alle Instanzen zu stoppen, können Sie sich einfach als ein anderer Benutzer anmelden, die .config-Dateien erstellen und diese in Ihr eigenes Ausgangsverzeichnis kopieren.
Ole Tange
Auf einem Ubuntu 16.04-Computer lief ich einfach libreoffice --headless --convert-to pdf <filename>.odtund es tat es ohne diese Vorbereitungsschritte. Es wurde eine Warnung über Java tho gedruckt.
Kyle
8

Ein möglicher Ansatz ist die Installation unoconv(falls nicht bereits installiert) und

unoconv file.odt

Bitte sehen Sie Mann unoconvfür Details

unoconvist ein Befehlszeilenprogramm, das jedes Dateiformat, das LibreOffice importieren kann, in jedes Dateiformat konvertieren kann, das LibreOffice exportieren kann. unoconvverwendet die UNO-Bindungen des LibreOffice für die nicht interaktive Konvertierung ....

Auf einigen Plattformen muss auch libreoffice-headless\ danke {Aaron} installiert werden.

JJoao
quelle
Unter CentOS7 musste ich das Paket auch hinzufügen libreoffice-headless, um es automatisieren zu können. Wenn der Benutzer es noch nie zuvor verwendet hat, unoconvschlägt der erste Aufruf mit Fehler 81 fehl, nachdem eine Reihe von Dateien in erstellt wurde ~/.config/.
Aaron D. Marasco
1
@ AaronD.Marasco, vielen Dank für diese wichtige Information! Wahrscheinlich fehlt eine Abhängigkeit in der Spezifikationsdatei. Ich werde Ihren Tipp zur Antwort hinzufügen.
JJoao
1
@JJoao, wenn Sie ein CentOS-Benutzer sind, sollten Sie Ihren Befund als Fehlerbericht melden.
vonbrand
Keine Spezifikationsabhängigkeit ... nur ein Anwendungsfall. Das Problem mit dem Fehler 81 ist angeblich behoben, aber ich weiß nicht, welche Version; Ich denke, CentOS hat es noch nicht.
Aaron D. Marasco
2

Hier ist ein ganz anderer Ansatz.

Dies ist möglich, da in jüngster Zeit eine Reihe neuer Konvertierungspfade durch die neu erworbene Fähigkeit von Pandoc zum Lesen von ODT-Dateien eröffnet wurden.

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

Aus seiner nativen Form 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 LaTeX zusätzlich zu Pandoc installiert sein.

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

  • Kontext: Dazu muss ConTeXt zusätzlich zu Pandoc installiert sein. ConTeXt ist als zusätzliches Paket für die meisten allgemeinen TeX-Distributionen verfügbar .

  • lualatex: Dazu muss LuaTeX zusätzlich zu Pandoc installiert sein (auch als zusätzliches Paket für allgemeine TeX-Distributionen verfügbar ).

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

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

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

  • weasyprint: Hierfür muss zusätzlich zu Pandoc weasyprint installiert werden.

In Pandoc sind jetzt einige weitere und neuere PDF-Engines integriert, die ich selbst noch nicht verwendet habe und die ich derzeit nicht genauer beschreiben kann: tektonisch 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 bewahrt beim Konvertieren keine Layouts , sondern den Inhalt und die Struktur von Dokumenten: 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 oben genannten Befehle sind die grundlegendsten für die Konvertierung. Abhängig von der ausgewählten PDF-Engine sind möglicherweise viele andere Optionen verfügbar, um das Erscheinungsbild der ausgegebenen PDF-Datei zu steuern. 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"

Dabei wird eine benutzerdefinierte Seitengröße (etwas größer als DIN A4) mit Rändern von 2 cm an der Oberkante und 1,12 cm an den anderen drei Kanten verwendet.

Kurt Pfeifle
quelle
pandocUnterstützt leider nicht jedes libreoffice-Format; Beispiel .ods(das Tabellenkalkulationsformat) wird nicht unterstützt.
Granitosaurus
@Granitosaurus: Die Frage betraf ODT, daher ist diese Antwort angemessen.
Kurt Pfeifle
Oh, ich habe nie angedeutet, dass es nicht angemessen ist, nur dass es ein unglücklicher Pandoc ist, der viele andere Libreoffice-Formate nicht unterstützt.
Granitosaurus
@Granitosaurus: Pandoc ist ein OpenSource-Softwareprojekt. So können Sie leicht beitragen. Wenn Sie keine zusätzlichen Funktionen in Pandoc programmieren möchten, können Sie deren Projekt zumindest auf Github finden und eine Funktionsanforderung an den Bug-Tracker senden . Dies war auch der Grund, warum die Pandoc-Unterstützung für die PowerPoint-Ausgabe hinzugefügt wurde ...
Kurt Pfeifle,