Ricette uWSGI: conversione di documenti utilizzando LibreOffice

Per preparare la conversione dei documenti avremo bisogno di LibreOffice, uwsgi-python, pylokit e webob. È possibile anche utilizzare una configurazione pronta. Ma questo è solo per avviare il server uWSGI, mentre per connettersi al server uWSGI utilizzeremo nginx.

La più semplice applicazione uWSGI in python consiste in una funzione application con due argomenti environ e start_response

import os       # importiamo
import pylokit  # moduli necessari
import tempfile # per noi
import webob    # moduli

office = pylokit.Office('/usr/lib/libreoffice/program') # carichiamo la libreria LibreOffice dal percorso specificato

def application(environ, start_response): # funzione per uWSGI
    request = webob.Request(environ) # otteniamo la richiesta dall'ambiente
    file = request.POST['file'] # il file per la conversione viene passato tramite multipart/form-data con il nome file
    filename, extension = os.path.splitext(file.filename) # otteniamo nome ed estensione
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('/')[-1]) as out: # creiamo un file temporaneo con l'estensione del file passato e un altro file temporaneo con l'estensione dalla fine della richiesta (per compatibilità con unoconv-api)
        inp.write(file.file.read()) # scriviamo il contenuto del file passato nel primo file temporaneo
        inp.flush() # (poiché LibreOfficeKit apparentemente funziona solo con file)
        with office.documentLoad(inp.name) as doc: # carichiamo il file passato 
            doc.saveAs(out.name) # esportiamo il file caricato in un altro file temporaneo (il formato è basato sull'estensione)
            with open(out.name, 'rb') as out2: # apriamo l'altro file temporaneo
                response = webob.Response(body=out2.read()) # creiamo il risultato dalla lettura dell'altro file temporaneo
                return response(environ, start_response) # e lo restituiamo

Certo, è possibile aggiungere anche la gestione degli errori.

La conversione di un file odt di prova di una pagina in pdf avviene circa 1,5 volte più veloce rispetto a unoconv-api.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster