Recipes uWSGI: Табдил додани ҳуҷҷатҳо бо истифода аз LibreOffice

Барои омода кардани табдили ҳуҷҷат ба мо лозим аст LibreOffice, uwsgi-python, пилокит и вебоб. Шумо инчунин метавонед истифода баред тайёр. Аммо ин танҳо барои оғоз кардани сервери uWSGI аст ва барои пайваст шудан ба сервери uWSGI мо истифода хоҳем кард nginx.

Соддатарин барномаи uWSGI дар python аз як барномаи функсионалӣ бо ду далели 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.

Манбаъ: will.com

Илова Эзоҳ