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()