[reportlab-users] Dynamic page sizes
    Glenn Linderman 
    v+python at g.nevcal.com
       
    Tue Oct 18 12:57:32 EDT 2011
    
    
  
On 10/18/2011 1:44 AM, Robin Becker wrote:
> On 17/10/2011 18:30, Glenn Linderman wrote:
>> I publish poetry in PDF format, because friends with iOS devices and 
>> iBooks
>> software have informed me that the PDF format is great for use with 
>> iBooks...
>> each page can contain one poem, and double-tapping the screen causes 
>> iBooks to
>> "zoom to width" of the text, presenting a nice, screen-filling,
>> vertically-scrolling-if-needed page containing the poem at the 
>> largest font size
>> that avoids line breaks.
>>
>> I generate the PDF files using 8.5x11 paper size, and 10 point font.
>>
>> The question: How could I generate the PDF file with variant page 
>> sizes (widths
>> primarily, but possibly height as well), such that each poem would 
>> have a page
>> size that just fits the poem? I speculate this would avoid the need 
>> for the
>> double-tap when viewing on iOS devices.
>>
>> Glenn
> ........
> Glenn,
>
> what method do you use to create the standard letter size documents? 
> ReportLab has both page oriented and document oriented mechanisms 
> built in.
>
> If you use a Canvas ie page oriented then it's possible to change the 
> page size that the canvas will use.
>
> #######
> from reportlab.pdfbase.ttfonts import TTFont
> from reportlab.pdfbase.pdfmetrics import registerFont
> from reportlab.pdfgen.canvas import Canvas
> from reportlab.lib.colors import green
> registerFont(TTFont("Vera", "Vera.ttf"))
> registerFont(TTFont("VeraBI", "VeraBI.ttf"))
> c = Canvas('helloworld.pdf', pagesize=(300,500))
> c.setFont('Vera', 10)
> c.drawString(100, 200, u'Hello World')
> c.showPage()
> c.setPageSize((400,600))
> c.setFont('Vera', 20)
> c.setFillColor(green)
> c.drawString(100, 300, u'Hello World')
> c.save()
> #######
>
> if you use the document oriented layout then page sizes are normally 
> determined by a page template so you have to switch the template 
> before the next page throw etc etc
I'm using platypus right now, although I've seen sample code that does 
drawstring stuff... much more cumbersome.  But I don't know how much 
info I can get back out of platypus after the fact.  One idea I had was 
to use a 2nd, temporary document to create each poetry page, and then 
"obtain metrics" (how much space was used, and did it actually fit on 
one page), but I have no clue (and found no APIs) how to "obtain metrics".
I think I'm missing informational APIs: how does one tell what page is 
being generated, or which frame is being filled? and bounding rectangles 
for the generated text in a frame? Am I overlooking something, or is 
this information not available from platypus?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://two.pairlist.net/pipermail/reportlab-users/attachments/20111018/08c29d2a/attachment.html>
    
    
More information about the reportlab-users
mailing list