Ricette uWSGI: trasformazione dei documenti utilizzando LibreOffice

Per la preparazione della conversione dei documenti avremo bisogno di LibreOffice, uwsgi-python, pylokit e webob. Possiamo anche utilizzare un modo già pronto. Ma questo è solo per avviare il server uWSGI, e per connettersi al server uWSGI useremo nginx.

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

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

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

def application(environ, start_response): # funzione per uWSGI
    request = webob.Request(environ) # otteniamo la richiesta dall'ambiente
    file = request.POST['file'] # il file da convertire è passato tramite multipart\/form-data con il nome file
    filename, extension = os.path.splitext(file.filename) # otteniamo il nome e l'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 dall'endpoint (per compatibilità con unoconv-api)
        inp.write(file.file.read()) # scriviamo il contenuto del file passato nel primo file temporaneo
        inp.flush() # (poiché LibreOfficeKit per qualche motivo funziona solo con i 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 è preso dall'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

È possibile, naturalmente, aggiungere anche la gestione di vari errori.

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

Fonte: habr.com

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