Für die Umwandlung von Dokumenten benötigen wir , , und . Man kann auch . Dies dient jedoch nur zum Starten des uWSGI-Servers, und zur Verbindung mit dem uWSGI-Server verwenden wir .
Die einfachste uWSGI-Anwendung in Python besteht aus einer Funktion application mit zwei Argumenten environ und start_response.
import os # importieren
import pylokit # notwendige
import tempfile # Module
import webob # für uns
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 dem Environment holen
file = request.POST['file'] # Datei zur Umwandlung wird über multipart\/form-data mit dem Namen file übergeben
filename, extension = os.path.splitext(file.filename) # Datei-Name und -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 eingesendeten Datei und einen weiteren temporären Datei mit der Erweiterung aus dem Ende der Anfrage erstellen (für die Kompatibilität mit unoconv-api)
inp.write(file.file.read()) # Inhalt der eingesendeten Datei in die erste temporäre Datei schreiben
inp.flush() # (da LibreOfficeKit aus irgendeinem Grund nur mit Dateien arbeitet)
with office.documentLoad(inp.name) as doc: # Die eingesendete 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
Natürlich könnte man auch die Verarbeitung von verschiedenen Fehlern hinzufügen.
Die Umwandlung einer Test-ODT-Datei in PDF erfolgt etwa 1,5-mal schneller im Vergleich zu .
Quelle: habr.com
