เชฆเชธเซเชคเชพเชตเซเช เชฐเซเชชเชพเชเชคเชฐเชฃ เชคเซเชฏเชพเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ เช
เชฎเชจเซ เชเชฐเซเชฐ เชเซ
เชชเชพเชฏเชฅเซเชจเชฎเชพเช เชธเซเชฅเซ เชธเชฐเชณ 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) # ะธ ะฒะพะทะฒัะฐัะฐะตะผ ะตะณะพ
เชคเชฎเซ, เช เชฒเชฌเชคเซเชค, เชเชฐเชฐ เชนเซเชจเซเชกเชฒเชฟเชเช เชชเชฃ เชเชฎเซเชฐเซ เชถเชเซ เชเซ.
เชเซเชธเซเช เชธเชฟเชเชเชฒ-เชชเซเช เชเชกเซเชเซ เชซเชพเชเชฒเชจเซ เชชเซเชกเซเชเชซเชฎเชพเช เชเชจเซเชตเชฐเซเช เชเชฐเชตเซเช เชคเซเชจเซ เชธเชฐเชเชพเชฎเชฃเซเชฎเชพเช เชฒเชเชญเช 1,5 เชเชฃเซเช เชเชกเชชเซ เชเซ
เชธเซเชฐเซเชธ: www.habr.com