袛谢褟 锌褉懈谐芯褌芯胁谢械薪懈褟 锌褉械芯斜褉邪蟹芯胁邪薪懈褟 写芯泻褍屑械薪褌芯胁 薪邪屑 锌芯薪邪写芯斜懈褌褋褟
小邪屑芯械 锌褉芯褋褌芯械 uWSGI-锌褉懈谢芯卸械薪懈械 薪邪 python 褋芯褋褌芯懈褌 懈蟹 褎褍薪泻褑懈懈 application 褋 写胁褍屑褟 邪褉谐褍屑械薪褌邪屑懈 environ 懈 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 褉邪蟹邪 斜褘褋褌褉械械 锌芯 褋褉邪胁薪械薪懈褞 褋
诪拽讜专: www.habr.com