If a paragraph has a few foot notes towards the bottom of the page, and the footnote body cannot fit into the remaining page, FOP would crash. This patch doesn't solve the problem, but it simply trap the error and skip the footnote body and output a message after the page number so that the user still get a pdf file to visually examine where the missing footnote might be and maybe rearrange his text to fit. I think this is better than FOP just dying without generating a pdf file. Some better solution may be: (1) properly move the footnote to next page (i.e. say, last line of page 1 has a footnote refering to footnote 1, but the footnote body itself only appears in bottom of page 2). (2) temperarily lengthen the page content size, get the footnote overhanging below the nominal bottom of page and output a message to tell user to rearrange his text. I had a look around Footnote.java and FootnoteBody.java for a few hours but neither look too easy, so I gave up. I think ideally the behaviour should be similar to latex i.e. fit as much of footnote 1 into bottom of page 1, and output the rest to bottom of page two, but since FOP doesn'timplement xsl-footnote-separator yet, this may be a bit confusing visually. -------------------------------------------- *** /home/LEUNGH2/xml-fop/src/org/apache/fop/fo/flow/FootnoteBody.java-org Sun Mar 4 21:34:52 2001 --- /home/LEUNGH2/xml-fop/src/org/apache/fop/fo/flow/FootnoteBody.java Sat Jul 7 00:40:46 2001 *************** *** 108,114 **** for ( int i = this.marker; i < numChildren; i++ ) { FONode fo = (FONode) children.elementAt(i); Status status; ! if ( (status = fo.layout(blockArea)).isIncomplete() ) { this.resetMarker(); return status; } --- 108,125 ---- for ( int i = this.marker; i < numChildren; i++ ) { FONode fo = (FONode) children.elementAt(i); Status status; ! try { ! status = fo.layout(blockArea); ! } catch (NullPointerException e) { ! System.out.println(""); ! System.out.println("***A paragraph near the bottom of the page has a footnote"); ! System.out.println("***which is too big to fit into the remaining"); ! System.out.println("***available space. The footnote is being skipped."); ! System.out.println("***Please rewrite the paragraph or the footnote body."); ! this.resetMarker(); ! return new Status(Status.OK); ! }; ! if ( status.isIncomplete() ) { this.resetMarker(); return status; }
Footnotes not fitting on the current page no longer crash FOP. If possible, the footnote is shifted as a whole to the next page. (See Bug 8819)
batch transition pre-FOP1.0 resolved+fixed bugs to closed+fixed