Per preparare la conversione dei documenti avremo bisogno di , , e . È possibile anche utilizzare . Ma questo è solo per avviare il server uWSGI, mentre per connettersi al server uWSGI utilizzeremo .
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 .
Fonte: habr.com
