Pour préparer la conversion de documents, nous aurons besoin de , , et . Vous pouvez également utiliser . Mais c'est uniquement pour lancer le serveur uWSGI ; pour se connecter au serveur uWSGI, nous allons utiliser .
L'application uWSGI la plus simple en python consiste en une fonction application avec deux arguments : environ et start_response.
import os # importation
import pylokit # modules nécessaires
import tempfile # requis
import webob # modules
office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # chargement de la bibliothèque LibreOffice à partir du chemin spécifié
def application(environ, start_response): # fonction pour uWSGI
request = webob.Request(environ) # obtenir la requête de l'environnement
file = request.POST['file'] # le fichier à convertir est transmis via multipart\/form-data avec le nom file
filename, extension = os.path.splitext(file.filename) # obtenir le nom et l'extension
with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\/')[-1]) as out: # créer un fichier temporaire avec l'extension du fichier transmis et un autre fichier temporaire avec l'extension de la demande (pour la compatibilité avec unoconv-api)
inp.write(file.file.read()) # écrire le contenu du fichier transmis dans le premier fichier temporaire
inp.flush() # (car LibreOfficeKit ne fonctionne apparemment qu'avec des fichiers)
with office.documentLoad(inp.name) as doc: # charger le fichier transmis
doc.saveAs(out.name) # exporter le fichier chargé vers un autre fichier temporaire (le format est pris à partir de l'extension)
with open(out.name, 'rb') as out2: # ouvrir l'autre fichier temporaire
response = webob.Response(body=out2.read()) # créer le résultat à partir de la lecture de l'autre fichier temporaire
return response(environ, start_response) # et le renvoyer
Bien sûr, on peut également ajouter le traitement de diverses erreurs.
La conversion d'un fichier odt unique de test en pdf se fait environ 1,5 fois plus vite par rapport à .
Source : habr.com
