LibreOffice im Headless-Modus in Docker für die PDF-Konvertierung ausführen

Ja. Für einmalige Dokumentkonvertierungen erstellen Sie ein kleines Docker-Image mit installiertem LibreOffice und führen soffice --headlesses aus --convert-to. Binden Sie das Eingabeverzeichnis schreibgeschützt und ein separates Ausgabeverzeichnis mit Schreibzugriff ein, damit die PDF-Datei auf Ihrem Hostsystem erscheint. Dieses Beispiel verwendet ein Debian-basiertes Image und konvertiert eine DOCX-Datei in PDF; LibreOffice wird dabei nicht als Netzwerkdienst bereitgestellt.

Terminal-Editor, der ein auf Debian basierendes Dockerfile mit installiertem LibreOffice Writer und Schriftarten anzeigt.
Das Dockerfile installiert LibreOffice Writer und ein Basisschriftpaket und verwendet dann soffice als Container-Befehl.

Was bewirkt der Headless-Modus und wann ist Docker sinnvoll?

Der Headless-Modus startet LibreOffice ohne grafische Benutzeroberfläche. LibreOffice dokumentiert diesen Modus für die Nutzung über die Kommandozeile und die API. Die Kommandozeilenoptionen unterstützen die Dateikonvertierung mit einem Ausgabeverzeichnis. Docker verpackt die Anwendung und ihre Abhängigkeiten, sodass ein Skript oder eine Workstation dasselbe Container-Image ausführen kann, ohne die Desktop-Suite auf dem Host installieren zu müssen.

Dieses Muster eignet sich gut für lokale Batch-Jobs, CI-Tasks oder einen Backend-Worker, der eine Datei empfängt und das konvertierte Ergebnis speichert. Ein einfacher Headless-Container ist an sich keine HTTP-Konvertierungs-API: Er lauscht auf keinem Port und akzeptiert keine Web-Uploads. Benötigen Sie einen persistenten Dienst, implementieren Sie eine API und eine Job-Queue um den Konvertierungsprozess und fügen Sie Anforderungsvalidierung, Timeouts, Dateigrößenbeschränkungen und Isolation hinzu.

1. Erstellen Sie die Eingabe- und Ausgabeverzeichnisse.

Erstellen Sie auf einem Linux- oder macOS-Host mit Bash oder einer ähnlichen Shell einen Projektordner mit separaten Verzeichnissen. Legen Sie das Quelldokument hinein inputund lassen Sie die Verzeichnisse outputbeim ersten Ausführen leer.

mkdir -p lo-work/input lo-work/output
cp report.docx lo-work/input/
cd lo-work

Die folgenden Docker-Befehle verwenden Unix-Pfade und Shell-Syntax. Unter Windows müssen Sie die Hostpfad-Syntax für PowerShell oder die Eingabeaufforderung anpassen und sicherstellen, dass Docker Desktop auf das Laufwerk zugreifen darf, das diese Ordner enthält.

2. Erstellen Sie ein Image mit LibreOffice

Erstellen Sie eine Datei namens „ Dockerfileinside“ lo-workmit folgendem Inhalt:

FROM debian:bookworm-slim

RUN apt-get update && apt-get install -y --no-install-recommends \
    libreoffice-writer fonts-liberation \
    && rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["soffice"]

libreoffice-writerEnthält Writer und die benötigten Konvertierungsfilter für gängige Textverarbeitungsformate. Fügen Sie diese hinzu libreoffice-calc, libreoffice-impresswenn der Container Tabellenkalkulationen oder Präsentationen konvertieren soll. Das Schriftartenpaket ist nur eine Basisversion; installieren Sie die Schriftarten, die Ihre Dokumente benötigen und für die Sie die Nutzungsrechte besitzen, da fehlende Schriftarten den Zeilenumbruch und Seitenumbrüche beeinträchtigen können.

Erstellen Sie das Image aus dem Verzeichnis, das die Dockerfile enthält:

docker build -t lo-headless .

Das Beispiel verwendet Debian Bookworm-Paketnamen. Basis-Image-Tags und Repository-Pakete ändern sich im Laufe der Zeit. Wählen Sie für einen Produktions-Build ein gepflegtes Basis-Image, erstellen Sie es regelmäßig neu, um Sicherheitsupdates zu erhalten, und fixieren Sie das Basis-Image anhand des Digests, wenn Sie reproduzierbare Builds benötigen. Vermeiden Sie die Installation von Paketen aus einem nicht zugehörigen Repository, nur um einem Tutorial zu folgen.

Das Terminal zeigt an, dass der Befehl `docker build -t lo-headless .` ausgeführt wird und der Aufbau des Container-Images abgeschlossen ist.
Erstellen Sie das lokale Image aus der Dockerfile, bevor Sie den Konvertierungscontainer ausführen.

3. LibreOffice mit separaten Mounts ausführen

Starten Sie einen temporären Container und übergeben Sie die Konvertierungsoptionen nach dem Image-Namen. Das Eingabeverzeichnis ist schreibgeschützt; nur das Ausgabeverzeichnis ist beschreibbar. Die --userOption führt den Prozess unter Linux mit den Benutzer- und Gruppen-IDs des Hosts aus und HOME=/tmpgibt LibreOffice ein beschreibbares Home-Verzeichnis. Passen Sie die Ordnerberechtigungen an, falls der Host-Benutzer keine Schreibrechte hat output.

docker run --rm \
  --user "$(id -u):$(id -g)" \
  --env HOME=/tmp \
  -v "$PWD/input:/input:ro" \
  -v "$PWD/output:/output" \
  lo-headless \
  --headless --nologo \
  -env:UserInstallation=file:///tmp/lo-profile \
  --convert-to pdf:writer_pdf_Export \
  --outdir /output \
  /input/report.docx

--headlessDie grafische Benutzeroberfläche wird unterdrückt, --convert-to pdf:writer_pdf_Exportder PDF-Exportfilter ausgewählt und --outdirdas Ergebnis im eingebundenen Ausgabeverzeichnis gespeichert. Der eindeutige Benutzerprofilpfad ermöglicht diesem Prozess ein beschreibbares LibreOffice-Konfigurationsverzeichnis. Wenn Sie mehrere Konvertierungen gleichzeitig in einem langlebigen Container ausführen, verwenden Sie für jeden Prozess einen separaten Profilpfad.

Verwenden Sie --mountstattdessen -vdie explizitere Mount-Syntax von Docker. Bind-Mounts sind an Pfade auf dem Host des Docker-Daemons gebunden, während Read-Write-Mounts Containerprozessen ermöglichen, Dateien auf dem Host zu ändern. Halten Sie Mounts eng, vermeiden Sie das Mounten Ihres Home-Verzeichnisses oder Docker-Sockets und führen Sie keinen Dokumentenkonvertierungs-Worker mit unnötigen Berechtigungen aus.

Terminalbefehl zum Ausführen des lo-headless-Containers mit schreibgeschützter Eingabe, beschreibbarer Ausgabe, Headless-Konvertierung und einem separaten Profil
Der Befehl „run“ übergibt die Quelldatei an soffice und beschränkt gleichzeitig den Zugriff des Hosts auf die beiden Projektordner.

4. Bestätigen Sie, dass die PDF-Datei erstellt wurde.

Überprüfen Sie das Ausgabeverzeichnis des Hosts, nachdem Docker beendet wurde:

ls -l output/
file output/report.pdf
test -s output/report.pdf

Die PDF-Datei muss vorhanden und nicht leer sein. Öffnen Sie sie in einem PDF-Reader und überprüfen Sie Seitenzahl, Tabellen, Bilder, Seitenumbrüche und Schriftarten, bevor Sie sich darauf verlassen. Ein erfolgreicher Prozessabschluss beweist nicht, dass alle Elemente wie gewünscht dargestellt wurden, insbesondere wenn ein Dokument Schriftarten oder Funktionen verwendet, die im Container nicht verfügbar sind. Verwenden Sie für jeden Durchlauf ein neues Ausgabeverzeichnis oder einen neuen Ausgabedateinamen, damit eine ältere PDF-Datei nicht mit der neuesten Konvertierung verwechselt werden kann.

Terminal listet report.pdf im Ausgabeverzeichnis auf und identifiziert es als PDF-Dokument
Prüfen Sie, ob die Ausgabedatei existiert und als PDF erkannt wird, und überprüfen Sie anschließend die Seiten auf Layoutänderungen.

Was sollte ich überprüfen, wenn die Konvertierung fehlschlägt?

  • Keine Ausgabedatei: Bitte überprüfen Sie den Quelldateinamen und den Containerpfad, ob der Container inputunter <Pfad> eingebunden wurde /inputund ob das outputHostverzeichnis für den ausgewählten Benutzer beschreibbar ist.
  • Profil- oder Sperrfehler: Prüfen Sie, ob der -env:UserInstallationPfad beschreibbar ist. Verwenden Sie für jeden gleichzeitig laufenden LibreOffice-Prozess ein separates Profilverzeichnis.
  • Geändertes Layout: Installieren Sie die benötigten Schriftarten aus dem Bild und überprüfen Sie die PDF-Datei. Die Darstellung kann aufgrund der Verfügbarkeit von Schriftarten, Exportfiltern und Versionsunterschieden von der eines Desktop-Systems abweichen.
  • Docker-Mount-Fehler: Überprüfen Sie, ob beide Host-Verzeichnisse existieren, bevor Sie -voder verwenden --mount, und überprüfen Sie, ob der Daemon darauf zugreifen kann.

Das genaue Verhalten der Optionen ist in der LibreOffice-Befehlszeilenparameterreferenz beschrieben . Paketnamen finden Sie in der Debian Bookworm-Paketliste für LibreOffice Writer . Die offizielle Docker-Dokumentation erklärt Bind-Mounts und die Dockerfile-Anweisungen .

Einen Kommentar hinterlassen

LibreOffice dazu bringen, Ihre Java-Laufzeitumgebung zu erkennen

LibreOffice dazu bringen, Ihre Java-Laufzeitumgebung zu erkennen

Installieren Sie eine kompatible Java-Laufzeitumgebung, aktivieren Sie diese in LibreOffice und beheben Sie das Problem einer leeren JRE-Liste, ohne dabei nicht damit zusammenhängende Einstellungen zu ändern.

LibreOffice im Headless-Modus in Docker für die PDF-Konvertierung ausführen

LibreOffice im Headless-Modus in Docker für die PDF-Konvertierung ausführen

Erstellen Sie einen kleinen LibreOffice-Container, konvertieren Sie Office-Dokumente ohne grafische Benutzeroberfläche und überprüfen Sie die PDF-Ausgabe bei gleichzeitiger Beschränkung des Zugriffs auf die Host-Datei.

LibreOffice Impress-Dateien verkleinern, ohne die Bilder zu verwischen

LibreOffice Impress-Dateien verkleinern, ohne die Bilder zu verwischen

Reduzieren Sie die Größe Ihrer LibreOffice-Präsentationsdateien, indem Sie eingebettete Fotos komprimieren, sinnvolle Bildeinstellungen wählen und die Qualität der Folien vor dem Teilen überprüfen.

Verhindern des Beschneidens von benutzerdefinierten Ausdrucken in LibreOffice

Verhindern des Beschneidens von benutzerdefinierten Ausdrucken in LibreOffice

Passen Sie die Seitenabmessungen von LibreOffice an Ihren Drucker an, überprüfen Sie die druckbaren Ränder und korrigieren Sie die Skalierung, bevor Sie ein Dokument in benutzerdefinierter Größe drucken.

Beschleunigen Sie Calc-Makros durch das Lesen und Schreiben von Daten in Stapeln

Beschleunigen Sie Calc-Makros durch das Lesen und Schreiben von Daten in Stapeln

Ersetzen Sie wiederholte Zellzugriffe durch das Lesen und Schreiben großer Bereiche, vergleichen Sie anschließend die Ergebnisse und schützen Sie Formeln in großen Calc-Arbeitsmappen.

Organisieren eines LibreOffice-Buches mit verknüpften Masterdokumenten

Organisieren eines LibreOffice-Buches mit verknüpften Masterdokumenten

Teilen Sie ein langes Manuskript in Kapitel auf, fügen Sie diese in Writer zusammen und achten Sie auf einheitliche Stile, Inhalte und Exportprüfungen.

Verbinden Sie LibreOffice Base mit PostgreSQL mithilfe des integrierten Assistenten

Verbinden Sie LibreOffice Base mit PostgreSQL mithilfe des integrierten Assistenten

Nutzen Sie die direkte PostgreSQL-Option von Base, um Ihre Serverdetails einzugeben, sich anzumelden, eine ODB-Verbindungsdatei zu speichern und häufige Zugriffsfehler zu beheben.

Benutzerdefinierte Schriftarten für LibreOffice Flatpak verfügbar machen

Benutzerdefinierte Schriftarten für LibreOffice Flatpak verfügbar machen

Installieren Sie eine Schriftart in Ihrem Linux-Benutzerschriftartenordner, starten Sie LibreOffice Flatpak neu und überprüfen Sie, ob sie in Writer angezeigt wird, ohne die Anwendungssandbox zu beeinträchtigen.

LibreOffice-Speicherabstürze auf Sonoma stoppen: Lokale Lösungen zuerst

LibreOffice-Speicherabstürze auf Sonoma stoppen: Lokale Lösungen zuerst

Schützen Sie Ihre Arbeit und isolieren Sie Speicherabstürze auf Netzlaufwerken in LibreOffice auf macOS Sonoma mit einem lokalen Workflow, Berechtigungsprüfungen und gezielten Tests.

CSV-IDs in Calc beibehalten, indem sie als Text importiert werden.

CSV-IDs in Calc beibehalten, indem sie als Text importiert werden.

Führende Nullen in Calc bleiben erhalten, indem Sie ID-Spalten beim CSV-Import auf Text einstellen, die Vorschau überprüfen und die gespeicherten Daten kontrollieren.