uWSGI వంటకాలు: LibreOfficeని ఉపయోగించి పత్రాలను మార్చడం

మాకు అవసరమైన డాక్యుమెంట్ మార్పిడిని సిద్ధం చేయడానికి LibreOffice, uwsgi-పైథాన్, పైలోకిట్ и వెబ్బాబ్. మీరు కూడా ఉపయోగించవచ్చు రెడీమేడ్. కానీ ఇది uWSGI సర్వర్‌ని ప్రారంభించడం కోసం మాత్రమే, మరియు uWSGI సర్వర్‌కి కనెక్ట్ చేయడానికి మేము ఉపయోగిస్తాము వికీపీడియా.

పైథాన్‌లోని సరళమైన uWSGI అప్లికేషన్ ఎన్విరాన్ మరియు 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

ఒక వ్యాఖ్యను జోడించండి