Before I waste a lot of time trying to figure out how I should fix that, I thought I'd just drop in a test case. Luca, for you it's probably very easy to say at which point I should hook in to create pages with empty content so the non-fitting content is simply pushed to the next page. In the end, that "pushing-loop" need an upper limit (like 50 iterations or so) after which it throws a layout exception complaining about too little room to place content (This check used to be in FlowLM [1]). I'm somewhat stuck in PageBreakingAlgorithm.removeNode(). Intuitively, I'd say I'd have to create a new KnuthNode that somehow results in an empty page or something like that.
BTW, Luca, I haven't forgotten your post about keep-with-previous in tables. Thank you for that one. ATM I'm swimming in another lake trying to remain on top. :-) [1] http://cvs.apache.org/viewcvs.cgi/xml-fop/src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java?r1=1.9&r2=1.10&diff_format=h On 21.06.2005 15:10:36 jeremias wrote: > jeremias 2005/06/21 06:10:36 > > Modified: test/layoutengine disabled-testcases.txt > Added: test/layoutengine/testcases normal-breaking5.xml > Log: > In page breaking, content that doesn't fit, should move to the next page > even if that means creating empty pages. <snip/> > <testcase> > <info> > <p> > This test checks normal breaking. It checks whether elements that > don't fit on a > page are sent over to the next if that one has more room (indirectly > checks > changing available BPD, too). > </p> > </info> > <fo> > <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" widows="0" > orphans="0"> > <fo:layout-master-set> > <fo:simple-page-master master-name="short" page-height="30pt" > page-width="120pt"> > <fo:region-body/> > </fo:simple-page-master> > <fo:simple-page-master master-name="long" page-height="100pt" > page-width="120pt"> > <fo:region-body/> > </fo:simple-page-master> > <fo:page-sequence-master master-name="master"> > <fo:single-page-master-reference master-reference="long"/> > <fo:single-page-master-reference master-reference="short"/> > <fo:single-page-master-reference master-reference="long"/> > </fo:page-sequence-master> > </fo:layout-master-set> > <fo:page-sequence master-reference="master"> > <fo:flow flow-name="xsl-region-body"> > <fo:block background-color="orange" keep-together="always">Apache > FOP is a great tool to create PDF documents with.</fo:block> > <fo:block background-color="orange" keep-together="always">Apache > FOP is a great tool to create PDF documents with.</fo:block> > <fo:block background-color="orange" keep-together="always">Apache > FOP is a great tool to create PDF documents with.</fo:block> > <fo:block background-color="orange" keep-together="always">Apache > FOP is a great tool to create PDF documents with.</fo:block> > <fo:block background-color="yellow">last line in new > block</fo:block> > </fo:flow> > </fo:page-sequence> > </fo:root> > </fo> > <checks> > <eval expected="4" xpath="count(//pageViewport)"/> > > <eval expected="6" xpath="sum(//[EMAIL > PROTECTED]/page/regionViewport/regionBody/mainReference/span/flow/block/@bpda) > div 14400"/> > <!-- the second page should be empty since the third block doesn't fit > into that page with only 30pt BPD --> > <eval expected="0" xpath="sum(//[EMAIL > PROTECTED]/page/regionViewport/regionBody/mainReference/span/flow/block/@bpda) > div 14400"/>"/> > <eval expected="6" xpath="sum(//[EMAIL > PROTECTED]/page/regionViewport/regionBody/mainReference/span/flow/block/@bpda) > div 14400"/>"/> > <eval expected="1" xpath="sum(//[EMAIL > PROTECTED]/page/regionViewport/regionBody/mainReference/span/flow/block/@bpda) > div 14400"/>"/> > </checks> > </testcase> Jeremias Maerki
