uWSGI-Rezepte: Dokumente mit LibreOffice konvertieren.

Zur Durchführung der Dokumentenumwandlung benötigen wir LibreOffice, uwsgi-python, pylokit und webob. Man kann auch ein vorgefertigtes Image verwenden. ein fertiges Bild zurückgreifen. Dies ist jedoch nur für den Betrieb des uWSGI-Servers gedacht, und zur Verbindung mit dem uWSGI-Server werden wir nginx.

Das einfachste uWSGI-Anwendungsbeispiel in Python besteht aus einer Anwendung mit zwei Argumenten: environ und start_response.

import os       # importieren
import pylokit  # erforderliche
import tempfile # benötigte
import webob    # Module

office = pylokit.Office('/usr/lib/libreoffice/program') # laden der LibreOffice-Bibliothek vom angegebenen Pfad

def application(environ, start_response): # Funktion für uWSGI
    request = webob.Request(environ) # Anfrage aus der Umgebung erhalten
    file = request.POST['file'] # Die Datei zur Umwandlung wird über multipart/form-data mit dem Namen file übergeben
    filename, extension = os.path.splitext(file.filename) # Den Namen und die Erweiterung erhalten
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('/')[-1]) as out: # Einen temporären Datei mit der Erweiterung der übergebenen Datei und eine andere temporäre Datei mit der Erweiterung aus der Anfrage (für die Kompatibilität mit unoconv-api) erstellen
        inp.write(file.file.read()) # Den Inhalt der übergebenen Datei in die erste temporäre Datei schreiben
        inp.flush() # (da LibreOfficeKit seltsamerweise nur mit Dateien funktioniert)
        with office.documentLoad(inp.name) as doc: # Die übergebene Datei laden
            doc.saveAs(out.name) # Die geladene Datei in die andere temporäre Datei exportieren (das Format wird aus der Erweiterung entnommen)
            with open(out.name, 'rb') as out2: # Die andere temporäre Datei öffnen
                response = webob.Response(body=out2.read()) # Ergebnis aus dem Lesen der anderen temporären Datei erstellen
                return response(environ, start_response) # und zurückgeben

Es ist natürlich auch möglich, eine Fehlerbehandlung hinzuzufügen.

Die Umwandlung einer Testeinseitigen odt-Datei in pdf erfolgt etwa 1,5-mal schneller im Vergleich zu unoconv-api.

Quelle: habr.com

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster