{
if (processWatermark)
{
startProcessing(logicalPage.getWatermarkArea());
}
final BlockRenderBox headerArea = logicalPage.getHeaderArea();
startProcessing(headerArea);
headerProcessed = true;
}
processBoxChilds(logicalPage);
if (iterativeUpdate == false)
{
final BlockRenderBox repeatFooterBox = logicalPage.getRepeatFooterArea();
startProcessing(repeatFooterBox);
final BlockRenderBox pageFooterBox = logicalPage.getFooterArea();
startProcessing(pageFooterBox);
}
}
finishBox(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)
effectiveHeaderSize = 0;
pageOffset = logicalPage.getPageOffset();
pageEndPosition = (logicalPage.getPageEnd());
if (startBox(logicalPage))
{
if (headerProcessed == false)
{
pageOffset = 0;
contentOffset = 0;
effectiveHeaderSize = 0;
if (processWatermark)
{
final BlockRenderBox watermarkArea = logicalPage.getWatermarkArea();
pageEndPosition = watermarkArea.getHeight();
startProcessing(watermarkArea);
}
final BlockRenderBox headerArea = logicalPage.getHeaderArea();
pageEndPosition = headerArea.getHeight();
startProcessing(headerArea);
contentOffset = headerArea.getHeight();
headerProcessed = true;
}
pageOffset = logicalPage.getPageOffset();
pageEndPosition = logicalPage.getPageEnd();
effectiveHeaderSize = contentOffset;
processBoxChilds(logicalPage);
if (iterativeUpdate == false)
{
pageOffset = 0;
final BlockRenderBox repeatFooterArea = logicalPage.getRepeatFooterArea();
final long repeatFooterOffset = contentOffset + (logicalPage.getPageEnd() - logicalPage.getPageOffset());
final long repeatFooterPageEnd = repeatFooterOffset + repeatFooterArea.getHeight();
effectiveHeaderSize = repeatFooterOffset;
pageEndPosition = repeatFooterPageEnd;
startProcessing(repeatFooterArea);
final BlockRenderBox footerArea = logicalPage.getFooterArea();
final long footerPageEnd = repeatFooterPageEnd + footerArea.getHeight();
effectiveHeaderSize = repeatFooterPageEnd;
pageEndPosition = footerPageEnd;
startProcessing(footerArea);
}
}