Рецепти за uWSGI: преобразуване на документи с помощта на LibreOffice

За да приготвим преобразуването на документи, ще ни трябва LibreOffice, uwsgi-python, pylokit и webob. Може също да използваме готовия вариант. Но това е само за стартиране на uWSGI сървъра, а за свързване към uWSGI сървъра ще използваме nginx.

Най-простото uWSGI приложение на python се състои от функцията application с два аргумента environ и start_response

import os       # импорт
import pylokit  # необходимите
import tempfile # ни трябват
import webob    # модулите

office = pylokit.Office('/usr/lib/libreoffice/program') # зареждаме библиотеката LibreOffice по указан път

def application(environ, start_response): # функция за uWSGI
    request = webob.Request(environ) # получаваме заявката от околната среда
    file = request.POST['file'] # файлът за преобразуване се предава чрез multipart/form-data с име file
    filename, extension = os.path.splitext(file.filename) # получаваме името и разширението
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('/')[-1]) as out: # създаваме един временен файл с разширение на предадения файл и друг временен файл с разширение от края на запитването (за съвместимост с unoconv-api)
        inp.write(file.file.read()) # записваме съдържанието на предадения файл в първия временен файл
        inp.flush() # (тъй като LibreOfficeKit по някаква причина работи само с файлове)
        with office.documentLoad(inp.name) as doc: # зареждаме предадения файл
            doc.saveAs(out.name) # експортираме заредения файл в друг временен файл (форматът се взема от разширението)
            with open(out.name, 'rb') as out2: # отваряме другия временен файл
                response = webob.Response(body=out2.read()) # създаваме резултата от прочитането на другия временен файл
                return response(environ, start_response) # и го връщаме

Разбира се, можем да добавим обработка на различни грешки.

Преобразуването на тестовия одностраничен odt файл в pdf става приблизително 1,5 пъти по-бързо в сравнение с unoconv-api.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster