Pentru a pregăti conversia documentelor, avem nevoie de , , și . Putem de asemenea să folosim . Dar acesta este doar pentru a porni serverul uWSGI, iar pentru a ne conecta la serverul uWSGI vom folosi .
Cel mai simplu aplicație uWSGI în python constă din funcția application cu două argumente environ și start_response
import os # importăm
import pylokit # necesare
import tempfile # pentru noi
import webob # module
office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # încărcăm biblioteca LibreOffice de la calea specificată
def application(environ, start_response): # funcția pentru uWSGI
request = webob.Request(environ) # obținem solicitarea din mediu
file = request.POST['file'] # fișierul pentru conversie este transmis prin multipart\/form-data cu numele file
filename, extension = os.path.splitext(file.filename) # obținem numele și extensia
with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\/')[-1]) as out: # creăm un fișier temporar cu extensia fișierului transmis și alt fișier temporar cu extensia din sfârșitul cererii (pentru compatibilitate cu unoconv-api)
inp.write(file.file.read()) # scriem conținutul fișierului transmis în primul fișier temporar
inp.flush() # (deoarece LibreOfficeKit din motive necunoscute funcționează doar cu fișiere)
with office.documentLoad(inp.name) as doc: # încărcăm fișierul transmis
doc.saveAs(out.name) # exportăm fișierul încărcat în alt fișier temporar (formatul este preluat din extensie)
with open(out.name, 'rb') as out2: # deschidem alt fișier temporar
response = webob.Response(body=out2.read()) # creăm rezultatul din citirea altui fișier temporar
return response(environ, start_response) # și îl returnăm
Desigur, putem adăuga și gestionarea diverselor erori.
Conversia unui fișier odt de test în pdf se face aproximativ de 1,5 ori mai rapid comparativ cu .
Sursa: habr.com
