Use z3c.rml to add a PDF view in Plone: http://pypi.python.org/pypi/z3c.rml
First you add the z3c.rml package to the eggs section in your buildout.cfg:
# Add additional eggs here
# elementtree is required by Plone
eggs =
z3c.rml
Next you write a new view class for the PDF view. A nifty way is to subclass the view class already in use for the (standard html) view
from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
from z3c.rml.rml2pdf import parseString
class NiceViewPDF(NiceView):
def __call__(self):
self.request.response.setHeader('content-type', 'application/pdf')
rml_doc = ViewPageTemplateFile('templates/nice_view_pdf.pt')(self)
return parseString(rml_doc.encode('utf-8')).read()
The last thing you need is a 'nice_view_pdf.pt' template file.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE document SYSTEM "http://www.reportlab.com/docs/rml.dtd">
<document filename="template.pdf"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="mydomain">
<template pageSize="A4" author="www.seantis.ch" title="Title">
<pageTemplate id="main">
<frame id="first" x1="72" y1="70" width="451" height="600"/>
</pageTemplate>
</template>
<story>
<h1 tal:content="python: context.Title()">Title</h1>
</story>
</document>
(example from: http://svn.zope.org/z3c.rml/trunk/src/z3c/rml/tests/input/)
"RML Reference": http://svn.zope.org/z3c.rml/trunk/src/z3c/rml/rml- reference.pdf?view=auto