„unoconv“ für müheloses Konvertieren von Dokumenten
Das Konvertieren von Dokumenten zwischen verschiedenen Formaten ist eine alltägliche Aufgabe für Entwickler und Fachleute. Historisch war unoconv ein Open-Source-Tool, das LibreOffice nutzte, um Dokumente wie DOCX, ODT und XLSX in PDF und andere Formate zu konvertieren.
Unoconv ist veraltet und sein Repository ist archiviert. Verwenden Sie für alle neuen Implementierungen unoserver, den modernen Nachfolger. Dieser Beitrag wird als historische Referenz gepflegt sowie für alle, die bestehende unoconv-Workflows betreuen.
Einführung in „unoconv“ und seine Open-Source-Funktionen
„Unoconv“ (Universal Office Converter) ist ein Kommandozeilen-Werkzeug, das LibreOffice für die Dokumentkonvertierung nutzt. Es unterstützt eine große Bandbreite an Dokumentformaten und ist damit nützlich für Entwickler, die Legacy-Systeme pflegen oder bestehende Workflows unterstützen. Obwohl unoconv veraltet ist, dient es als lehrreiches Beispiel für die Automatisierung von Dokumentkonvertierungen.
„unoconv“ auf Ihrem System einrichten und installieren
Voraussetzungen
Bevor Sie „unoconv“ verwenden, stellen Sie sicher, dass LibreOffice auf Ihrem System installiert ist, da unoconv für die Durchführung der Konvertierungen darauf angewiesen ist. Beachten Sie, dass unoconv mit modernen Python-Versionen Kompatibilitätsprobleme haben kann; erwägen Sie für neue Projekte den Wechsel zu unoserver.
Installation unter Linux (Ubuntu/Debian)
Prüfen Sie bei einem bestehenden Legacy-Deployment, ob Ihre Distribution unoconv noch als Paket anbietet:
apt-cache policy libreoffice unoconv
Die Verfügbarkeit eines Pakets garantiert keine Kompatibilität mit Ihren Python- und LibreOffice-Versionen. Halten Sie Legacy-Umgebungen auf festen Versionen und testen Sie sie. Folgen Sie für ein neues Deployment der gepflegten Installationsanleitung für unoserver.
Installation unter macOS
Die Homebrew-Formula für unoconv ist deaktiviert, weil ihr Repository archiviert wurde. Verwenden
Sie brew install unoconv nicht für eine neue Einrichtung. Installieren Sie LibreOffice und
folgen Sie den unoserver-Anweisungen zur Auswahl eines Python-Interpreters, der das Modul
uno von LibreOffice importieren kann:
brew install --cask libreoffice
Installation unter Windows
Die native Windows-Unterstützung für unoconv ist begrenzt. Wir empfehlen, das Windows Subsystem for Linux (WSL2) zu verwenden und der Linux-Installationsanleitung zu folgen, um die Kompatibilität sicherzustellen.
Gängige Anwendungsfälle und Szenarien
Entwickler können unoconv für verschiedene Aufgaben einsetzen, darunter:
- Batch-Konvertierungen: Mehrere DOCX-Dateien in einem einzigen Vorgang nach PDF konvertieren.
- Berichtserstellung automatisieren: PDF-Berichte automatisch aus Dokumentvorlagen erzeugen.
- Wartung von Legacy-Systemen: Workflows unterstützen und pflegen, die weiterhin auf unoconv angewiesen sind.
- Serverseitige Verarbeitung: Dokumentkonvertierung für die automatisierte Verarbeitung in Backend-Anwendungen integrieren.
Schritt-für-Schritt-Anleitung: Dokumente von docx nach PDF konvertieren
Die grundlegende Konvertierung mit unoconv ist unkompliziert. Führen Sie Folgendes aus, um eine einzelne DOCX-Datei nach PDF zu konvertieren:
unoconv -f pdf document.docx
Für eine kleine Menge von Dateien in einem Verzeichnis ohne kollidierende PDF-Ausgaben:
unoconv -f pdf ./*.docx
Dokumentkonvertierungen mit Skripten automatisieren
Die Automatisierung der Dokumentkonvertierung kann Ihren Workflow optimieren. Das folgende
Python-Skript zeigt, wie Sie DOCX-Dateien mit einer bereits funktionierenden
unoconv-Installation konvertieren. Speichern Sie es als convert_documents.py und führen
Sie python3 convert_documents.py docs new-pdfs aus. Es setzt ein neues Ausgabeverzeichnis voraus, überspringt
Verzeichnisse und Symlinks und veröffentlicht jedes Ergebnis erst, nachdem der Befehl erfolgreich
war. Schlägt eine Konvertierung fehl, beendet sich der Prozess mit einem Fehler, nachdem er die
übrigen Dateien versucht hat.
import os
from pathlib import Path
import subprocess
import sys
from tempfile import TemporaryDirectory
def convert_documents(input_dir, output_dir):
source = Path(input_dir).resolve(strict=True)
files = sorted(path for path in source.iterdir()
if not path.is_symlink() and path.is_file()
and path.suffix.lower() == '.docx')
if not files:
print('No DOCX files found', file=sys.stderr)
return 1
output = Path(output_dir).absolute()
output.mkdir(mode=0o700)
failures = 0
for path in files:
try:
with TemporaryDirectory(prefix='.conversion-', dir=output) as temporary:
candidate = Path(temporary) / 'result.pdf'
subprocess.run(
['unoconv', '-f', 'pdf', '-o', str(candidate), str(path)],
check=True, timeout=120,
)
if not candidate.is_file() or candidate.stat().st_size == 0:
raise ValueError('No nonempty PDF was produced')
# Hard-link publication fails instead of replacing a destination that appeared.
os.link(candidate, output / (path.stem + '.pdf'))
print(f'Converted {path.name}')
except (OSError, ValueError, subprocess.SubprocessError):
failures += 1
print(f'Conversion failed: {path.name}', file=sys.stderr)
return 1 if failures else 0
if __name__ == '__main__':
if len(sys.argv) != 3:
sys.exit('Usage: python3 convert_documents.py <input-directory> <new-output-directory>')
try:
sys.exit(convert_documents(sys.argv[1], sys.argv[2]))
except (OSError, ValueError):
sys.exit('Cannot prepare conversion directories; use an existing input and a new output directory')
Das Timeout begrenzt den Client-Prozess, nicht zwangsläufig Arbeit, die bereits in LibreOffice läuft. Verwenden Sie für nicht vertrauenswürdige Dateien einen dedizierten Konvertierungs-Worker mit Ressourcenlimits des Betriebssystems und ohne Zugriff auf sensible Bereiche des Dateisystems. Prüfen Sie Rendering, Schriften und Seitenumbruch anhand repräsentativer Dokumente; ein erfolgreicher Befehl ist keine Garantie für visuelle Treue.
Häufige Probleme beheben
Konflikte mit Python-Versionen
Auf modernen Systemen kann es zu Konflikten zwischen Python-Versionen und unoconv kommen. Um diese Probleme zu beheben, können Sie:
- Eine virtuelle Python-Umgebung mit einer kompatiblen Version verwenden.
- Eine bestimmte Python-Version installieren, die gut mit unoconv funktioniert.
- Zu unoserver wechseln, das eine bessere Python-3-Kompatibilität bietet.
Kompatibilität der LibreOffice-Version
Stellen Sie sicher, dass Ihre LibreOffice-Installation mit unoconv kompatibel ist:
libreoffice --version
unoconv --version
Hinweise zum Deployment in Containern
Berücksichtigen Sie bei containerisierten Umgebungen Folgendes:
- Bauen Sie auf einer unterstützten Distribution auf und installieren Sie deren LibreOffice-Pakete.
- Stellen Sie sicher, dass die erforderlichen Schriften installiert sind.
- Konfigurieren Sie passende Dateiberechtigungen.
Diese Schritte helfen, Fehler bei der Dokumentkonvertierung in Container-Deployments zu vermeiden.
Moderne Alternativen und Vergleich
Unoserver (empfohlen)
Unoserver ist der Nachfolger von unoconv. Es stellt einen dauerhaft laufenden LibreOffice-Worker und
einen separaten Client namens unoconvert bereit. Sein Python-Interpreter muss
uno importieren können; eine beliebige virtuelle Umgebung genügt nicht.
Ein vollständiges Integrationsbeispiel finden Sie unter
Dokumentkonvertierung aus Rust.
LibreOffice-CLI
LibreOffice selbst bietet eine native Konvertierungsoption auf der Kommandozeile, die unoconv überflüssig macht. Führen Sie Folgendes aus, um eine DOCX-Datei mithilfe der LibreOffice-CLI nach PDF zu konvertieren:
soffice --headless --convert-to pdf document.docx
Cloud-basierte Lösungen
Ziehen Sie für skalierbare Produktionsumgebungen cloudbasierte Dienste zur Dokumentkonvertierung oder containerisierte Lösungen in Betracht, die eine höhere Zuverlässigkeit und mühelose Wartung bieten.
Fazit
Auch wenn unoconv Entwicklern über die Jahre gute Dienste geleistet hat, bedeutet seine Abkündigung, dass neue Projekte moderne Alternativen wie unoserver oder cloudbasierte Konvertierungsdienste in Betracht ziehen sollten. Wer Legacy-Systeme pflegt, sollte auf Kompatibilität und mögliche Probleme mit Python-Versionen achten.
Wenn Sie eine robuste, skalierbare Lösung für die Dokumentkonvertierung suchen, werfen Sie einen Blick auf Transloadits Dienst für Dokumentkonvertierung.
