This describes the limitations of the Changing IPD (Width) Algorithm
Changing IPD refers to when the width of pages in the same page sequence vary
Tables (and Lists)
Narrow to Wide
Tables (or Lists) that start on a smaller width page (such as Portrait) continue to the next page with the same width as the previous page, so they will not use the extra space. Tables, Lists and Paragraphs that start on the wider page will use the extra width.
Wide to Narrow
Tables (or Lists) that start on a larger page width (such as Landscape) continue to the next narrower page with the same with as the previous page, and the output gets cropped. Later versions of FOP will generate a warning see below.
In addition to not being re-laid out, a table or list that is broken over two pages of different widths may have its border- and padding-before wrong. The .conditionality component will be interpreted as retain even when left to its default value 'discard'.
Also, the space-before of the first element following the table or list will be discarded, as if the element were starting the page. The workaround is to set its space-before.conditionality component to retain.
FOP Warning
WARNING: Content that cannot handle IPD changes is flowing to a narrower page. Part of it may be clipped by the page border.
Paragraphs
Paragraphs do change the width across the page.
Last Page
There is a limiation that changing IPD doesn't work in conjunction with page-position="last" So if the document has a fo:page-sequence-master with conditional alternatives and page-position="last" and the last page is a different width to preceeding pages then the width of the content is not adjusted. If page-position="last" is not used then the content on last page will be adjusted if the width changes.
Performance Issues with change of page width in a page sequence.
Each time you change the page width in a page sequence the FOP engine will recalculate the layout from that part.
e.g consider the following document in one page sequence (where [] indicates the page width and the number is the page number).
[1] [2] [3 ] [4 ] [5] [6]
What Happens
In this document page sequence, FOP will work out the whole flow based on the width of page 1. It will check if the page width changed in the flow, and it did at page 3, so it recalculates all of the pages from page 3 with page 3's width. It will check if the page width changed in the flow from 3, and it did at page 5, so it recalculates all of the pages from page 5 with page 5's width. As you can see this can be very expensive in CPU time if you change the page width inside a page-sequence, always use a a new page sequence for each width change if possible.