Mapishi ya uWSGI: Kubadilisha Hati Kwa Kutumia LibreOffice

Ili kuandaa ubadilishaji wa hati tunahitaji LibreOffice, uwsgi-python, pylokit ΠΈ mtandao. Unaweza pia kutumia tayari. Lakini hii ni kwa ajili ya kuzindua seva ya uWSGI pekee, na kuunganisha kwenye seva ya uWSGI tutakayotumia nginx.

Programu rahisi zaidi ya uWSGI kwenye python ina programu ya kufanya kazi na hoja mbili za mazingira na 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) # ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π΅Π³ΠΎ

Unaweza, bila shaka, pia kuongeza ushughulikiaji wa makosa.

Kubadilisha faili ya odt ya ukurasa mmoja kuwa pdf ni takriban mara 1,5 haraka ikilinganishwa na unoconv-api.

Chanzo: mapenzi.com

Kuongeza maoni