diff --git a/knowledge_repo/app/routes/posts.py b/knowledge_repo/app/routes/posts.py index 19bb37908..3827c51a1 100755 --- a/knowledge_repo/app/routes/posts.py +++ b/knowledge_repo/app/routes/posts.py @@ -189,13 +189,12 @@ def download(): post = current_repo.post(request.args.get('post')) # Note: `post` is expected to be a post path resource_type = request.args.get('type', 'source') - if resource_type in ('kp', 'zip'): - filename = os.path.basename(post.path) - if resource_type == 'zip': - filename = filename[:-3] + '.zip' + if resource_type == 'post': + format = request.args.get('format', 'zip') + filename = os.path.basename(post.path)[:-2] + format return Response( - post.to_string(format=resource_type), - mimetype="application/zip", + post.to_string(format=format), + mimetype="application/octet-stream", headers={u"Content-disposition": "attachment; filename={}".format(filename)}) elif resource_type == 'source': path = request.args.get('path', None) diff --git a/knowledge_repo/app/templates/markdown-base.html b/knowledge_repo/app/templates/markdown-base.html index 03dbf2b4f..f3e35cc00 100644 --- a/knowledge_repo/app/templates/markdown-base.html +++ b/knowledge_repo/app/templates/markdown-base.html @@ -19,9 +19,11 @@ {% endblock %} {% block panel_right %} + {% if can_download %} Downloads Portable Knowledge Post + PDF ZIP Archive {% if downloads %} Source Files diff --git a/knowledge_repo/converters/pdf.py b/knowledge_repo/converters/pdf.py new file mode 100644 index 000000000..def7a51ab --- /dev/null +++ b/knowledge_repo/converters/pdf.py @@ -0,0 +1,30 @@ +from ..converter import KnowledgePostConverter + +from .html import HTMLConverter + + +class PDFConverter(KnowledgePostConverter): + ''' + Use this as a template for new KnowledgePostConverters. + ''' + _registry_keys = ['pdf'] + + @property + def dependencies(self): + # Dependencies required for this converter on top of core knowledge-repo dependencies + return ['weasyprint'] + + def from_file(self, filename, **opts): + raise NotImplementedError + + def from_string(self, filename, **opts): + raise NotImplementedError + + def to_file(self, filename, **opts): + with open(filename, 'wb') as f: + f.write(self.to_string()) + + def to_string(self, **opts): + from weasyprint import HTML + html = HTMLConverter(self.kp).to_string() + return HTML(string=html).write_pdf()