Recepten voor uWSGI: documenten omzetten met LibreOffice

Voor het omzetten van documenten hebben we nodig LibreOffice, uwsgi-python, pylokit en webob. We kunnen ook gebruikmaken van een kant-en-klare versie. Maar dit is alleen voor het starten van de uWSGI-server, en voor de verbinding met de uWSGI-server gebruiken we met alles wat daarin al aanwezig is, en de inhoud van de map.

De eenvoudigste uWSGI-applicatie in python bestaat uit de functie application met twee argumenten environ en start_response

import os       # importeren
import pylokit  # benodigde
import tempfile # tijdelijke bestanden
import webob    # modules

office = pylokit.Office(' /usr/lib/libreoffice/program') # laad de LibreOffice bibliotheek op de opgegeven locatie

def application(environ, start_response): # functie voor uWSGI
    request = webob.Request(environ) # ontvang verzoek uit de omgeving
    file = request.POST['file'] # bestand voor conversie wordt doorgegeven via multipart/form-data met de naam file
    filename, extension = os.path.splitext(file.filename) # verkregen naam en extensie
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('/')[-1]) as out: # maak een tijdelijk bestand met de extensie van het doorgegeven bestand en een ander tijdelijk bestand met de extensie van de aanvraag (voor compatibiliteit met unoconv-api)
        inp.write(file.file.read()) # schrijf de inhoud van het doorgegeven bestand naar het eerste tijdelijke bestand
        inp.flush() # (omdat LibreOfficeKit om de een of andere reden alleen met bestanden werkt)
        with office.documentLoad(inp.name) as doc: # laad het doorgegeven bestand 
            doc.saveAs(out.name) # exporteer het geladen bestand naar een ander tijdelijk bestand (formaat wordt genomen van extensie)
            with open(out.name, 'rb') as out2: # open het andere tijdelijke bestand
                response = webob.Response(body=out2.read()) # maak het resultaat aan uit het voorlezen van het andere tijdelijke bestand
                return response(environ, start_response) # en geef het terug

Je kunt natuurlijk ook foutafhandeling toevoegen.

De conversie van een test eendimensionaal odt-bestand naar pdf gebeurt ongeveer 1,5 keer sneller in vergelijking met unoconv-api.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster