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