This is the whole example for ReportLab using StringIO, chapter 10.3.3 in the book:
# delete lines starting with "#" from reportlab.platypus import * from reportlab.lib.styles import getSampleStyleSheet from reportlab.rl_config import defaultPageSize from reportlab.lib.units import inch, mm from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY from reportlab.lib import colors *# from uuid import uuid4* from cgi import escape *# import os* *import StringIO* def get_me_a_pdf(): *out = StringIO.StringIO()* title = "This The Doc Title" heading = "First Paragraph" text = 'bla '* 10000 styles = getSampleStyleSheet() *# tmpfilename=os.path.join(request.folder,'private',str(uuid4())) * doc = SimpleDocTemplate(*out*) story = [] story.append(Paragraph(escape(title),styles["Title"])) story.append(Paragraph(escape(heading),styles["Heading2"])) story.append(Paragraph(escape(text),styles["Normal"])) story.append(Spacer(1,2*inch)) doc.build(story) *# data = open(tmpfilename,"rb").read()* *data = out.getvalue() #** os.unlink(tmpfilename)* * out.close()* response.headers['Content-Type']='application/pdf' return data Regards, Martin