uWSGI жор: LibreOffice ашиглан бичиг баримт хөрвүүлэх

Баримт бичгийн хөрвүүлэлтийг бэлтгэхийн тулд бидэнд хэрэгтэй LibreOffice, uwsgi-python, пилокит и вэб. Та бас ашиглаж болно бэлэн болсон. Гэхдээ энэ нь зөвхөн uWSGI серверийг эхлүүлэхэд зориулагдсан бөгөөд бид uWSGI сервертэй холбогдохын тулд ашиглах болно nginx.

Python дээрх хамгийн энгийн uWSGI програм нь 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.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх