This repository has been archived by the owner on Jun 5, 2018. It is now read-only.
/
app.py
94 lines (80 loc) · 2.77 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import tornado.ioloop
import tornado.web
class BaseHandler(tornado.web.RequestHandler):
"""docstring for BaseHandler"""
def get(self):
# raise HTTPError(404)
self.write_error(404)
def write_error(self, status_code, **kwargs):
# self.finish('404 NOT FOUND!!' + str(status_code))
msg = '404 NOT FOUND!!'
self.render('error.html',msg=msg)
class root(BaseHandler):
def get(self):
self.render("index.html")
def post(self):
file = self.request.files['filedata'][0]
filedata = file['body']
filename = file['filename']
# print file['content_type']
if os.path.getsize(save(filename, filedata)) >= 5120:
msg = "The File is bigger than 5 KB!"
self.render("error.html",msg=msg)
else:
reload(sys)
sys.setdefaultencoding('utf-8')
try:
html = misaka.html(filedata)
from io import BytesIO
import misaka
import xhtml2pdf.pisa as pisa
#解决中文字体
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont('msyh', './msyh.ttf'))
from xhtml2pdf import default
default.DEFAULT_FONT["helvetica"]="msyh"
buffer = BytesIO()
pdf = pisa.CreatePDF(html,buffer)
pdf = buffer.getvalue()
buffer.close()
saved_file_name = 'attachment; filename=' + file['filename'] + '.pdf'
self.set_header("Content-Type", "application/pdf")
self.set_header('Content-Disposition', saved_file_name)
self.write(pdf)
except Exception, e:
msg = "The File is not written using markdown!"
self.render("error.html",msg=msg)
def _path(name):
folder = os.path.join(os.path.dirname(__file__), 'files')
if not os.path.exists(folder):
os.makedirs(folder)
return '%s/%s' % (folder, name)
def save(name, data):
f = None
try:
f = open(_path(name), 'wb')
f.write(data)
except:
pass
finally:
if f: f.close()
return './files/' + name
settings = {
'debug': True,
'template_path': os.path.join(os.path.dirname(__file__), 'templates'),
'static_path': os.path.join(os.path.dirname(__file__), 'static'),
'gzip': True,
}
handlers = [
(r'/', root),
(r'/.*', BaseHandler),
]
application = tornado.web.Application(handlers, **settings)
if __name__ == '__main__':
application.listen(8000)
tornado.ioloop.IOLoop.instance().start()