RE: Column Balancing

2003-11-25 Thread Barnaby Shearer
Hi,

In case anyone else has a similar problem there is a simple (and very
obvious) fix:

In: BodyAreaContainer.resetSpanArea(), After line:

newHeight += 2 * 15600;

Add:

if(newHeight>getRemainingHeight()) {
newHeight = getRemainingHeight();
}

You can then tweak the newHeight safety margin till it works with your
content, without the columns overlapping the footer.

Yes, I don't know why it took me so long to see this ether.

Barnaby

>> My material contains a lot of tables with keep-together's and
external graphics. The image/table which are just too big to fit in the
estimated height of the first column are correctly move into the second
column, but this causes the second column to become longer then the
estimated maximum span height, this in turn causes fop to insert a page
break and move the end of the second column to the next page. However
this looks very odd as often 80% of the original page is still blank.
Fop already has a safety margin built into
BodyAreaContainer.resetSpanArea() to address this problem, however it is
set to small for my content.

>> You can easily overcome this problem by increasing the safety margin
which is added to maxHeigh in resetSpanArea() (from 2 * 15600, to 2 *
45600 in my case). This has the added benefit that it causes the first
column be about 4cm longer then the second before each span, which adds
some much needed white space to my layout.

>> However this introduces a new problem (which must be present to a
lesser degree anyway), the safety margin added in resetSpanArea() is
added after the check to see if the span's content fits on the page,
this means that if the content already filled the page, the span's new
height is increased by the safety margin and overlaps with the footer.

>> As far as I can see there are two ways to work around this:

>> Disable the column balancing when the contence of a span overflows
the page - simple set the column heights to the avaible size and then
fit as much content into column one followed by column two. (This must
be what happens on the last page of a flow).

(In fact the solution is even easier, simply don't let the column height
grow bigger then the page. The code already handles moving anything that
doesn't fit onto the next page.)

>> Change where the safety margin is added so that it is taken into
account when checking if the content fits on the page. This would cause
some unforinate white space at the bottom right of every page but I
could live with this. 

>> Whilst these sound fairly simple, my Java experience is limited and I
have not been able to follow though the fop structure to workout where
to implement these changes - could anyone give my any guidance on where
to start and/or which of the approaches might be easer to implement
given the way fop works.


Column Balancing

2003-11-24 Thread Barnaby Shearer
Hi,

I am using fop with a two column layout and am having some problems with
the column balancing when there is a spanned block midway though a page.

My material contains a lot of tables with keep-together's and external
graphics. The image/table which are just too big to fit in the estimated
height of the first column are correctly move into the second column,
but this causes the second column to become longer then the estimated
maximum span height, this in turn causes fop to insert a page break and
move the end of the second column to the next page. However this looks
very odd as often 80% of the original page is still blank. Fop already
has a safety margin built into BodyAreaContainer.resetSpanArea() to
address this problem, however it is set to small for my content.

You can easily overcome this problem by increasing the safety margin
which is added to maxHeigh in resetSpanArea() (from 2 * 15600, to 2 *
45600 in my case). This has the added benefit that it causes the first
column be about 4cm longer then the second before each span, which adds
some much needed white space to my layout.

However this introduces a new problem (which must be present to a lesser
degree anyway), the safety margin added in resetSpanArea() is added
after the check to see if the span's content fits on the page, this
means that if the content already filled the page, the span's new height
is increased by the safety margin and overlaps with the footer.

As far as I can see there are two ways to work around this:

Disable the column balancing when the contence of a span overflows the
page - simple set the column heights to the avaible size and then fit as
much content into column one followed by column two. (This must be what
happens on the last page of a flow).

Change where the safety margin is added so that it is taken into account
when checking if the content fits on the page. This would cause some
unforinate white space at the bottom right of every page but I could
live with this. 

Whilst these sound fairly simple, my Java experience is limited and I
have not been able to follow though the fop structure to workout where
to implement these changes - could anyone give my any guidance on where
to start and/or which of the approaches might be easer to implement
given the way fop works.

(I am using FOP 0.20.5 on the Sun JDK 1.4 under windows XP)

Thank you,

Barnaby