uWSGI reseptləri: LibreOffice istifadə edərək sənədlərin çevrilməsi

Sənədin çevrilməsini hazırlamaq üçün bizə lazımdır LibreOffice, uwsgi-python, pylokit и webob. Siz də istifadə edə bilərsiniz hazır. Lakin bu, yalnız uWSGI serverini işə salmaq və istifadə edəcəyimiz uWSGI serverinə qoşulmaq üçündür nginx.

Pythonda ən sadə uWSGI tətbiqi iki arqumentli environ və start_response ilə funksiya tətbiqindən ibarətdir

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) # и возвращаем его

Siz, əlbəttə ki, səhvlərin idarə edilməsini də əlavə edə bilərsiniz.

Test tək səhifəlik odt faylını pdf-ə çevirmək ilə müqayisədə təxminən 1,5 dəfə sürətlidir unoconv-api.

Mənbə: www.habr.com

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