public void update(final LogicalPageBox logicalPage,
final boolean iterativeUpdate)
{
// this.iterativeUpdate = iterativeUpdate;
final BlockRenderBox pageFooterBox = logicalPage.getFooterArea();
if (unalignedPagebands == false)
{
// The page-header and footer area are aligned/shifted within the logical pagebox so that all areas
// share a common coordinate system. This also implies, that the whole logical page is aligned content.
pageOffset = 0;
final long pageEnd = logicalPage.getPageEnd() - logicalPage.getPageOffset();
effectiveOffset = 0;
pageHeight = effectiveOffset + (pageEnd - pageOffset);
//Log.debug ("Content Processing " + pageOffset + " -> " + pageEnd);
if (startBlockBox(logicalPage))
{
if (headerProcessed == false)
{
startProcessing(logicalPage.getWatermarkArea());
final BlockRenderBox headerArea = logicalPage.getHeaderArea();
startProcessing(headerArea);
headerProcessed = true;
}
processBoxChilds(logicalPage);
if (iterativeUpdate == false)
{
pageHeight += pageFooterBox.getHeight();
startProcessing(pageFooterBox);
}
}
finishBlockBox(logicalPage);
}
else
{
// The page-header and footer area are not aligned/shifted within the logical pagebox.
// All areas have their own coordinate system starting at (0,0). We apply a manual shift here
// so that we dont have to modify the nodes (which invalidates the cache, and therefore is ugly)
effectiveOffset = 0;
pageOffset = 0;
pageHeight = (logicalPage.getPageEnd());
if (startBlockBox(logicalPage))
{
if (headerProcessed == false)
{
contentOffset = 0;
effectiveOffset = 0;
final BlockRenderBox watermarkArea = logicalPage.getWatermarkArea();
final long watermarkPageEnd = watermarkArea.getHeight();
pageHeight = effectiveOffset + (watermarkPageEnd - pageOffset);
startProcessing(watermarkArea);
final BlockRenderBox headerArea = logicalPage.getHeaderArea();
final long pageEnd = headerArea.getHeight();
pageHeight = effectiveOffset + (pageEnd - pageOffset);
startProcessing(headerArea);
contentOffset = headerArea.getHeight();
headerProcessed = true;
}
pageOffset = logicalPage.getPageOffset();
final long pageEnd = logicalPage.getPageEnd();
effectiveOffset = contentOffset;
pageHeight = effectiveOffset + (pageEnd - pageOffset);
processBoxChilds(logicalPage);
if (iterativeUpdate == false)
{
pageOffset = 0;
final BlockRenderBox footerArea = pageFooterBox;
final long footerOffset = contentOffset + (logicalPage.getPageEnd() - logicalPage.getPageOffset());
final long footerPageEnd = footerOffset + footerArea.getHeight();
effectiveOffset = footerOffset;
pageHeight = effectiveOffset + (footerPageEnd - pageOffset);
startProcessing(footerArea);
}
}