Para la preparación de la conversión de documentos, necesitaremos , , y . También podemos utilizar . Pero esto es solo para iniciar el servidor uWSGI, y para conectarnos al servidor uWSGI utilizaremos .
La aplicación uWSGI más simple en python consiste en una función application con dos argumentos environ y start_response
import os # importamos
import pylokit # módulos necesarios
import tempfile # necesitamos
import webob # módulos
office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # cargamos la biblioteca de LibreOffice en la ruta especificada
def application(environ, start_response): # función para uWSGI
request = webob.Request(environ) # obtenemos la solicitud del entorno
file = request.POST['file'] # el archivo para la conversión se pasa a través de multipart\/form-data con el nombre file
filename, extension = os.path.splitext(file.filename) # obtenemos el nombre y la extensión
with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\/')[-1]) as out: # creamos un archivo temporal con la extensión del archivo enviado y otro archivo temporal con la extensión del final de la solicitud (para compatibilidad con unoconv-api)
inp.write(file.file.read()) # escribimos el contenido del archivo enviado en el primer archivo temporal
inp.flush() # (ya que LibreOfficeKit, por alguna razón, solo funciona con archivos)
with office.documentLoad(inp.name) as doc: # cargamos el archivo enviado
doc.saveAs(out.name) # exportamos el archivo cargado a otro archivo temporal (el formato se toma de la extensión)
with open(out.name, 'rb') as out2: # abrimos el otro archivo temporal
response = webob.Response(body=out2.read()) # creamos el resultado a partir de la lectura del otro archivo temporal
return response(environ, start_response) # y lo devolvemos
Por supuesto, también se pueden agregar manejos de errores.
La conversión de un archivo odt de una sola página de prueba a pdf se realiza aproximadamente 1.5 veces más rápido en comparación con .
Fuente: habr.com
