[reportlab-users] Experimenting with new paragraphs, splitting issue
    Robin Becker 
    robin at reportlab.com
       
    Mon Dec  3 16:36:27 EST 2007
    
    
  
Dinu Gherman wrote:
........
> Ok, I've stripped down my sample code even further. It now should
> generate only one line of text spread over two little frames. When
> I use the RL paragraph class for doing this I get the following
> traceback:
> 
>     $ py251 test_twoframes.py
>     Traceback (most recent call last):
>       File "test_twoframes.py", line 49, in <module>
>         main()
>       File "test_twoframes.py", line 45, in main
>         doc.build(story)
>       File 
> "/usr/local/lib/python2.5/site-packages/reportlab/platypus/doctemplate.py", 
> line 740, in build
>         self.handle_flowable(flowables)
>       File 
> "/usr/local/lib/python2.5/site-packages/reportlab/platypus/doctemplate.py", 
> line 671, in handle_flowable
>         raise LayoutError(ident)
>     reportlab.platypus.doctemplate.LayoutError: Flowable <Paragraph at 
> 0x10f54e0 frame=F2>aaaaaaa bbbbbbb ccccccc ON_NEX too large on page 1
> 
Dinu, I'm probably not going to get much time to look at this till the 
weekend, but looking at the Paragraph version I see no problem.
We try to wrap a height 40 paragraph in available height 30. That fails, 
but the split cannot reduce the height. We flip to the next frame (also 
with available height 30) and try again; that fails so we give up. You 
probably wonder why we won't split into two lines. That is a hack in 
Paragraph.py where we always fail to split if trying to return a first 
split with only one line in. The intention is to avoid an orphan. If you 
intend to split lines into frames with only one line in them we need a 
different concept of layout.
> When I use my own (attached) paragraph class, I get the following
> traceback (preceeded by some debugging info):
> 
>     $ py251 test_twoframes.py
>     *** parse aaaaaaa bbbbbbb ccccccc ON_NEXT_LINE
>     *** wrap (240.000000, 30.000000)
>     *** wrap (240.000000, 40.000000) needed
>     *** parse aaaaaaa bbbbbbb ccccccc ON_NEXT_LINE
>     *** split (240.000000, 30.000000)
>     p1 aaaaaaa bbbbbbb ccccccc
>     p2 ON_NEXT_LINE
>     *** parse aaaaaaa bbbbbbb ccccccc
>     *** wrap (240.000000, 30.000000)
>     *** wrap (240.000000, 20.000000) needed
>     *** parse ON_NEXT_LINE
>     *** wrap (240.000000, 4.000000)
>     *** wrap (240.000000, 20.000000) needed
>     *** parse ON_NEXT_LINE
>     *** split (240.000000, 4.000000)
>     p1
>     p2 ON_NEXT_LINE
>     *** parse
>     *** wrap (240.000000, 4.000000)
>     *** wrap (240.000000, 20.000000) needed
>     Traceback (most recent call last):
>       File "test_twoframes.py", line 49, in <module>
>         main()
>       File "test_twoframes.py", line 45, in main
>         doc.build(story)
>       File 
> "/usr/local/lib/python2.5/site-packages/reportlab/platypus/doctemplate.py", 
> line 740, in build
>         self.handle_flowable(flowables)
>       File 
> "/usr/local/lib/python2.5/site-packages/reportlab/platypus/doctemplate.py", 
> line 663, in handle_flowable
>         raise LayoutError(ident)
>     reportlab.platypus.doctemplate.LayoutError: Splitting error(n==2) on 
> page 1 in
>     <Paragraph at 0x10f5738 frame=F1>ON_NEXT_LINE
> 
> To me it seems like RL is already doing the wrong thing, given the
> first traceback above. And apart from that, I don't understand why
> RL calls my pararaph's split method the second time with an y value
> of 4.0 as you cen see in the debugging info above? I've run this
> with RL-SVN, BTW.
.......
I suspect this error comes because you're being a bit clever about the 
split paragraphs. Remember that the outer packing loop tries to be as 
stupid as possible. The split purported to return a first flowable for 
which the wrap would succeed. Apparently in this case although the split 
returned 2 flowables the attempt to re-add the first with the existing 
frame parameters failed.
-- 
Robin Becker
    
    
More information about the reportlab-users
mailing list