Recepty uWSGI: Transformace dokumentů pomocí LibreOffice

K přípravě konverze dokumentů budeme potřebovat LibreOffice, uwsgi-python, pylokit a webob. Můžeme také využít hotový způsob. Ale to je pouze pro spuštění uWSGI serveru, a pro připojení k uWSGI serveru použijeme nginx.

Nejjednodušší uWSGI aplikace v Pythonu se skládá z funkce application se dvěma argumenty environ a start_response

import os       # importujeme
import pylokit  # potřebné
import tempfile # pro nás
import webob    # moduly

office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # nahráváme knihovnu LibreOffice podle zadaného cesty

def application(environ, start_response): # funkce pro uWSGI
    request = webob.Request(environ) # získáváme požadavek z prostředí
    file = request.POST['file'] # soubor pro konverzi je předáván prostřednictvím multipart\/form-data pod názvem file
    filename, extension = os.path.splitext(file.filename) # získáváme název a příponu
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\\')[-1]) as out: # vytváříme jeden dočasný soubor s příponou předaného souboru a druhý dočasný soubor s příponou z konce požadavku (pro kompatibilitu s unoconv-api)
        inp.write(file.file.read()) # zapisujeme obsah předaného souboru do prvního dočasného souboru
        inp.flush() # (protože LibreOfficeKit nějak podivně funguje pouze se soubory)
        with office.documentLoad(inp.name) as doc: # nahráváme předaný soubor
            doc.saveAs(out.name) # exportujeme nahraný soubor do jiného dočasného souboru (formát je braný z přípony)
            with open(out.name, 'rb') as out2: # otevíráme další dočasný soubor
                response = webob.Response(body=out2.read()) # vytváříme výsledek z přečtení dalšího dočasného souboru
                return response(environ, start_response) # a vracíme ho

Samozřejmě můžeme přidat také zpracování různých chyb.

Konverze testovacího jednosvazkového odt souboru do pdf probíhá přibližně 1,5krát rychleji než unoconv-api.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster