def doSubscriptions(self): style = self.getStyle() text = """There have been 21 subscription requests this week. All have been approved| X were approved, Y rejected, Z are still to be considered. """ png = 'Picture 1.png' subscriptionsPara = [ Spacer(inch * .25, inch * .25), Paragraph('Subscriptions', style['SectionTitle']), Paragraph(text, style=style["Normal_just_rind"]), Spacer(inch * .125, inch * .125), Paragraph(self.doRequests(), style=style["Normal_just_rind"]), Spacer(inch * .25, inch * .25) ] subscriptionsImg = ImageAndFlowables(Image(png, width=180, height=180), subscriptionsPara, imageLeftPadding=0, imageRightPadding=0, imageSide='right') return KeepTogether( [subscriptionsImg, Spacer(inch * .125, inch * .125)])
def doImport(self): style = self.getStyle() text = '''Import transfer rates and quality for %s. Maximum daily rate is 237MB/s, minimum rate is 100MB/s, average 169/MB/s. Average quality for the week is 30 percent.''' % self.site importPara = [ Spacer(inch * .25, inch * .25), Paragraph('Data Import', style['SectionTitle']), Paragraph(text, style=style["Normal_just"]) ] png = 'Picture 1.png' importImg = ImageAndFlowables(Image(png, width=340, height=240), importPara, imageLeftPadding=0, imageRightPadding=20, imageSide='left') return KeepTogether([importImg, Spacer(inch * .125, inch * .125)])
def test1(self): "This makes one long multi-page paragraph." # Build story. story = [] styleSheet = getSampleStyleSheet() h3 = styleSheet['Heading3'] bt = styleSheet['BodyText'] text = '''If you imagine that the box of X's tothe left is an image, what I want to be able to do is flow a series of paragraphs around the image so that once the bottom of the image is reached, then text will flow back to the left margin. I know that it would be possible to something like this using tables, but I can't see how to have a generic solution. There are two examples of this in the demonstration section of the reportlab site. If you look at the "minimal" euro python conference brochure, at the end of the timetable section (page 8), there are adverts for "AdSu" and "O'Reilly". I can see how the AdSu one might be done generically, but the O'Reilly, unsure... I guess I'm hoping that I've missed something, and that it's actually easy to do using platypus.We can do greek letters <greek>mDngG</greek>. This should be a u with a dieresis on top <unichar code=0xfc/>="<unichar code="0xfc"/>" and this &#xfc;="ü" and this \\xc3\\xbc="\xc3\xbc". On the other hand this should be a pound sign &pound;="£" and this an alpha &alpha;="α". You can have links in the page <link href="http://www.reportlab.com" color="blue">ReportLab</link> & <a href="http://www.reportlab.org" color="green">ReportLab.org</a>. Use scheme "pdf:" to indicate an external PDF link, "http:", "https:" to indicate an external link eg something to open in your browser. If an internal link begins with something that looks like a scheme, precede with "document:". <strike>This text should have a strike through it.</strike> ''' from reportlab.platypus.flowables import ImageAndFlowables, Image from reportlab.lib.testutils import testsFolder gif = os.path.join(testsFolder,'pythonpowered.gif') heading = Paragraph('This is a heading',h3) story.append(ImageAndFlowables(Image(gif),[heading,Paragraph(text,bt)])) phrase = 'This should be a paragraph spanning at least three pages. ' description = ''.join([('%d: '%i)+phrase for i in xrange(250)]) story.append(ImageAndFlowables(Image(gif),[heading,Paragraph(description, bt)],imageSide='left')) story.append(NextPageTemplate('special')) story.append(PageBreak()) VERA = ('Vera','VeraBd','VeraIt','VeraBI') for v in VERA: registerFont(TTFont(v,v+'.ttf')) registerFontFamily(*(VERA[:1]+VERA)) story.append(ImageAndFlowables( Image(gif,width=280,height=120), Paragraph('''<font name="Vera">The <b>concept</b> of an <i>integrated</i> one <b><i>box</i></b> solution for <i><b>advanced</b></i> voice and data applications began with the introduction of the IMACS. The IMACS 200 carries on that tradition with an integrated solution optimized for smaller port size applications that the IMACS could not economically address. An array of the most popular interfaces and features from the IMACS has been bundled into a small 2U chassis providing the ultimate in ease of installation.</font>''', style=ParagraphStyle( name="base", fontName="Helvetica", leading=12, leftIndent=0, firstLineIndent=0, spaceBefore = 9.5, fontSize=9.5, ) ), imageSide='left', ) ) story.append(ImageAndFlowables( Image(gif,width=240,height=120), Paragraph('''The concept of an integrated one box solution for advanced voice and data applications began with the introduction of the IMACS. The IMACS 200 carries on that tradition with an integrated solution optimized for smaller port size applications that the IMACS could not economically address. An array of the most popular interfaces and features from the IMACS has been bundled into a small 2U chassis providing the ultimate in ease of installation.''', style=ParagraphStyle( name="base", fontName="Helvetica", leading=12, leftIndent=0, firstLineIndent=0, spaceBefore = 9.5, fontSize=9.5, ) ), imageSide='left', ) ) story.append(PageBreak()) story.append(Paragraph('Image larger than the frame',h3)) story.append(ImageAndFlowables( Image(gif,width=6*110,height=6*44), Paragraph('''The concept of an integrated one box solution for advanced voice and data applications began with the introduction of the IMACS. The IMACS 200 carries on that tradition with an integrated solution optimized for smaller port size applications that the IMACS could not economically address. An array of the most popular interfaces and features from the IMACS has been bundled into a small 2U chassis providing the ultimate in ease of installation.''', style=ParagraphStyle( name="base", fontName="Helvetica", leading=12, leftIndent=0, firstLineIndent=0, spaceBefore = 9.5, fontSize=9.5, ) ), imageSide='left', ) ) doc = MyDocTemplate(outputfile('test_platypus_imageandflowables.pdf'),showBoundary=1) doc.multiBuild(story)