यूडब्ल्यूएसजीआई रेसिपी: लिब्रे ऑफिस का उपयोग करके दस्तावेज़ परिवर्तित करना

दस्तावेज़ रूपांतरण तैयार करने के लिए हमें इसकी आवश्यकता है लिब्रे ऑफिस, uwsgi-पायथन, pylocit и वेबबॉब. आप भी उपयोग कर सकते हैं बना बनाया. लेकिन यह केवल uWSGI सर्वर लॉन्च करने के लिए है, और uWSGI सर्वर से कनेक्ट करने के लिए हम उपयोग करेंगे nginx.

पायथन में सबसे सरल यूडब्ल्यूएसजीआई एप्लिकेशन में दो तर्क पर्यावरण और स्टार्ट_रेस्पॉन्स के साथ एक फ़ंक्शन एप्लिकेशन शामिल है

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

बेशक, आप त्रुटि प्रबंधन भी जोड़ सकते हैं।

एक परीक्षण एकल-पृष्ठ ओडीटी फ़ाइल को पीडीएफ में परिवर्तित करना तुलना में लगभग 1,5 गुना तेज है unoconv-api.

स्रोत: www.habr.com

एक टिप्पणी जोड़ें