Рецепты 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.

ссылка на оригинал статьи https://habr.com/ru/post/514220/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *