[reportlab-users] Absolute position of a paragraph in a page
Sergiu Iordache
solidsnakero at gmail.com
Mon Nov 30 17:00:42 EST 2009
On Mon, Nov 30, 2009 at 7:00 PM,
<reportlab-users-request at lists2.reportlab.com> wrote:
> Solid Snake wrote:
>> Hello,
>>
>> I'm new to ReportLab and I'd like to use it to generate a PDF. My
>> starting setup is pretty simple: a BaseDocTemplate which has a
>> PageTemplate in it with two Frames(2 columns). Here is the code on
>> pastebin[1]
>>
>> I'd like to put some Paragraphs in it but it is very important to know
>> the position of these paragraphs after they are placed by the build
>> function. Is there any way to do that?
>>
>> I have found a similar thread[2] on the list but I didn't understand
>> much of the answer.
>>
>> Thanks in advance,
>> Sergiu
> .......
>
> this snippet of code uses a special paragraph to allow you to find out where it
> was drawn (and also draws a box around it).
>
> from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
> from reportlab.platypus.paragraph import Paragraph
> from reportlab.platypus.doctemplate import SimpleDocTemplate
> from reportlab.platypus import Spacer
>
> class MyParagraph(Paragraph):
> def drawOn(self, canv, x, y, _sW=0):
> '''at the point this is called we should know how large we are'''
> canv.saveState()
> canv.setStrokeColor((1,0,0))
> canv.setLineWidth(1)
> print 'x=%s y=%s width=%s height=%s' % (x,y,self.width,self.height)
> canv.rect(x,y,self.width,self.height,stroke=1,fill=0)
> canv.restoreState()
> Paragraph.drawOn(self,canv,x,y,_sW)
>
> styleSheet = getSampleStyleSheet()
> bt = styleSheet['BodyText']
> p1=MyParagraph('''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.''', bt)
>
> p2=MyParagraph('''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.''', bt)
>
> story=[p1,Spacer(72,72),p2]
> doc = SimpleDocTemplate('tp.pdf')
> doc.build(story)
Thank you very much for the quick reply, that was exactly what I wanted.
Sergiu
More information about the reportlab-users
mailing list