/* (non-Javadoc)
 * @see com.itextpdf.layout.renderer.DocumentRenderer#updateCurrentArea(com.itextpdf.layout.layout.LayoutResult)
 */
 protected override LayoutArea UpdateCurrentArea(LayoutResult overflowResult) {
     AreaBreak areaBreak = overflowResult != null ? overflowResult.GetAreaBreak() : null;
     if (areaBreak is HtmlPageBreak) {
         HtmlPageBreakType htmlPageBreakType = ((HtmlPageBreak)areaBreak).GetBreakType();
         if (shouldTrimFirstBlankPagesCausedByBreakBeforeFirstElement && currentArea != null && overflowResult.GetStatus
             () == LayoutResult.NOTHING && currentArea.IsEmptyArea() && currentArea.GetPageNumber() == 1) {
             // Remove blank page that was added just to have area for elements to layout on.
             // Now we will add a page with dimensions and all the stuff that is requested by page-break-before
             document.GetPdfDocument().RemovePage(1);
             currentPageNumber = 0;
             overflowResult = null;
             currentArea = null;
             shouldTrimFirstBlankPagesCausedByBreakBeforeFirstElement = false;
             if (HtmlPageBreakType.LEFT.Equals(htmlPageBreakType) && !IsPageLeft(1) || HtmlPageBreakType.RIGHT.Equals(htmlPageBreakType
                 ) && !IsPageRight(1)) {
                 evenPagesAreLeft = !evenPagesAreLeft;
             }
         }
         // hack to change the "evenness" of the first page without adding an unnecessary blank page
         anythingAddedToCurrentArea = anythingAddedToCurrentArea || overflowResult != null && overflowResult.GetStatus
             () == LayoutResult.PARTIAL;
         if (HtmlPageBreakType.ALWAYS.Equals(htmlPageBreakType)) {
             LayoutArea nextArea = currentArea;
             if (anythingAddedToCurrentArea || currentArea == null) {
                 nextArea = base.UpdateCurrentArea(overflowResult);
             }
             anythingAddedToCurrentArea = false;
             return nextArea;
         }
         else {
             if (HtmlPageBreakType.LEFT.Equals(htmlPageBreakType)) {
                 LayoutArea nextArea = currentArea;
                 if (anythingAddedToCurrentArea || currentArea == null || !IsPageLeft(currentPageNumber)) {
                     do {
                         nextArea = base.UpdateCurrentArea(overflowResult);
                     }
                     while (!IsPageLeft(currentPageNumber));
                 }
                 anythingAddedToCurrentArea = false;
                 return nextArea;
             }
             else {
                 if (HtmlPageBreakType.RIGHT.Equals(htmlPageBreakType)) {
                     LayoutArea nextArea = currentArea;
                     if (anythingAddedToCurrentArea || currentArea == null || !IsPageRight(currentPageNumber)) {
                         do {
                             nextArea = base.UpdateCurrentArea(overflowResult);
                         }
                         while (!IsPageRight(currentPageNumber));
                     }
                     anythingAddedToCurrentArea = false;
                     return nextArea;
                 }
             }
         }
     }
     anythingAddedToCurrentArea = false;
     return base.UpdateCurrentArea(overflowResult);
 }
Esempio n. 2
0
 /// <summary>Instantiates a new html page break.</summary>
 /// <param name="type">the page break type</param>
 public HtmlPageBreak(HtmlPageBreakType type)
 {
     this.breakType = type;
 }