Receitas uWSGI: conversão de documentos usando LibreOffice

Para preparar a conversão de documentos, precisaremos LibreOffice, uwsgi-python, pylokit e webob. Também podemos utilizar uma forma pronta. Mas isso é apenas para iniciar o servidor uWSGI, e para conectar ao servidor uWSGI usaremos nginx.

O aplicativo uWSGI mais simples em python consiste na função application com dois argumentos environ e start_response

import os       # importamos
import pylokit  # módulos necessários
import tempfile # precisamos
import webob    # módulos

office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # carregamos a biblioteca LibreOffice no caminho especificado

def application(environ, start_response): # função para uWSGI
    request = webob.Request(environ) # obtemos a solicitação do ambiente
    file = request.POST['file'] # o arquivo para conversão é passado através de multipart\/form-data com o nome file
    filename, extension = os.path.splitext(file.filename) # obtemos o nome e a extensão
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\/')[-1]) as out: # criamos um arquivo temporário com a extensão do arquivo recebido e outro arquivo temporário com a extensão do final da solicitação (para compatibilidade com unoconv-api)
        inp.write(file.file.read()) # gravamos o conteúdo do arquivo recebido no primeiro arquivo temporário
        inp.flush() # (já que o LibreOfficeKit por algum motivo só funciona com arquivos)
        with office.documentLoad(inp.name) as doc: # carregamos o arquivo recebido 
            doc.saveAs(out.name) # exportamos o arquivo carregado para outro arquivo temporário (o formato é determinado pela extensão)
            with open(out.name, 'rb') as out2: # abrimos outro arquivo temporário
                response = webob.Response(body=out2.read()) # criamos o resultado a partir da leitura do outro arquivo temporário
                return response(environ, start_response) # e retornamos

Podemos, claro, adicionar o tratamento de vários erros.

A conversão de um arquivo odt de uma página de teste para pdf é cerca de 1,5 vezes mais rápida em comparação com unoconv-api.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster