Beispiel #1
0
  // support page border on root area
  protected BoxStyle buildRootStyle() {
    IStyle style = pageContent.getStyle();
    if ((style != null) && !style.isEmpty()) {
      BoxStyle boxStyle = new BoxStyle();
      IStyle cs = pageContent.getComputedStyle();
      int borderWidth = getDimensionValue(cs.getProperty(IStyle.STYLE_BORDER_LEFT_WIDTH), width);
      if (borderWidth > 0) {
        boxStyle.setLeftBorder(
            new BorderInfo(
                cs.getProperty(IStyle.STYLE_BORDER_LEFT_COLOR),
                cs.getProperty(IStyle.STYLE_BORDER_LEFT_STYLE),
                borderWidth));
      }

      borderWidth = getDimensionValue(cs.getProperty(IStyle.STYLE_BORDER_RIGHT_WIDTH), width);
      if (borderWidth > 0) {
        boxStyle.setRightBorder(
            new BorderInfo(
                cs.getProperty(IStyle.STYLE_BORDER_RIGHT_COLOR),
                cs.getProperty(IStyle.STYLE_BORDER_RIGHT_STYLE),
                borderWidth));
      }
      borderWidth = getDimensionValue(cs.getProperty(IStyle.STYLE_BORDER_TOP_WIDTH), width);
      if (borderWidth > 0) {
        boxStyle.setTopBorder(
            new BorderInfo(
                cs.getProperty(IStyle.STYLE_BORDER_TOP_COLOR),
                cs.getProperty(IStyle.STYLE_BORDER_TOP_STYLE),
                borderWidth));
      }

      borderWidth = getDimensionValue(cs.getProperty(IStyle.STYLE_BORDER_BOTTOM_WIDTH), width);
      if (borderWidth > 0) {
        boxStyle.setBottomBorder(
            new BorderInfo(
                cs.getProperty(IStyle.STYLE_BORDER_BOTTOM_COLOR),
                cs.getProperty(IStyle.STYLE_BORDER_BOTTOM_STYLE),
                borderWidth));
      }
      return boxStyle;
    }
    return boxStyle.DEFAULT;
  }
Beispiel #2
0
  protected void createRoot() {
    int overFlowType = context.getPageOverflow();

    if (overFlowType == IPDFRenderOption.OUTPUT_TO_MULTIPLE_PAGES) {
      // page.setExtendToMultiplePages( true );
    }

    pageContentWidth =
        getDimensionValue(pageContent, pageContent.getPageWidth())
            - boxStyle.getLeftBorderWidth()
            - boxStyle.getRightBorderWidth();
    pageContentHeight =
        getDimensionValue(pageContent, pageContent.getPageHeight())
            - boxStyle.getTopBorderWidth()
            - boxStyle.getBottomBorderWidth();

    // validate page width
    if (pageContentWidth <= 0) {
      pageContentWidth = DEFAULT_PAGE_WIDTH;
    }

    // validate page height
    if (pageContentHeight <= 0) {
      pageContentHeight = DEFAULT_PAGE_HEIGHT;
    }

    setWidth(pageContentWidth);
    setHeight(pageContentHeight);

    /** set position and dimension for root */
    ContainerArea pageRoot = new BlockContainerArea();
    BoxStyle boxStyle = buildRootStyle();
    if (boxStyle != BoxStyle.DEFAULT) {
      pageRoot.hasStyle = true;
    }
    pageRoot.setBoxStyle(boxStyle);
    rootLeft = getDimensionValue(pageContent, pageContent.getMarginLeft(), pageContentWidth);
    rootTop = getDimensionValue(pageContent, pageContent.getMarginTop(), pageContentWidth);
    rootLeft = Math.max(0, rootLeft);
    rootLeft = Math.min(pageContentWidth, rootLeft);
    rootTop = Math.max(0, rootTop);
    rootTop = Math.min(pageContentHeight, rootTop);
    pageRoot.setPosition(rootLeft, rootTop);
    int rootRight = getDimensionValue(pageContent, pageContent.getMarginRight(), pageContentWidth);
    int rootBottom =
        getDimensionValue(pageContent, pageContent.getMarginBottom(), pageContentWidth);
    rootRight = Math.max(0, rootRight);
    rootBottom = Math.max(0, rootBottom);
    if (rootLeft + rootRight > pageContentWidth) {
      rootRight = 0;
    }
    if (rootTop + rootBottom > pageContentHeight) {
      rootBottom = 0;
    }

    rootWidth = pageContentWidth - rootLeft - rootRight;
    rootHeight = pageContentHeight - rootTop - rootBottom;
    pageRoot.setWidth(rootWidth);
    pageRoot.setHeight(rootHeight);
    setRoot(pageRoot);
    pageRoot.setParent(this);

    /** set position and dimension for header */
    int headerHeight =
        getDimensionValue(pageContent, pageContent.getHeaderHeight(), pageRoot.getHeight());
    int headerWidth =
        pageRoot.getWidth() - boxStyle.getLeftBorderWidth() - boxStyle.getRightBorderWidth();
    headerHeight = Math.max(0, headerHeight);
    headerHeight = Math.min(pageRoot.getHeight(), headerHeight);
    RegionArea header = new RegionArea();
    header.setHeight(headerHeight);
    header.setWidth(headerWidth);
    header.context = context;
    header.needClip = true;
    header.setPosition(boxStyle.getLeftBorderWidth(), boxStyle.getTopBorderWidth());
    pageRoot.addChild(header);
    setHeader(header);
    header.setParent(pageRoot);

    /** set position and dimension for footer */
    int footerHeight =
        getDimensionValue(pageContent, pageContent.getFooterHeight(), pageRoot.getHeight());
    int footerWidth =
        pageRoot.getWidth() - boxStyle.getLeftBorderWidth() - boxStyle.getRightBorderWidth();
    footerHeight = Math.max(0, footerHeight);
    footerHeight = Math.min(pageRoot.getHeight() - headerHeight, footerHeight);
    RegionArea footer = new RegionArea();
    footer.setHeight(footerHeight);
    footer.setWidth(footerWidth);
    footer.context = context;
    footer.needClip = true;
    footer.setPosition(
        boxStyle.getLeftBorderWidth(),
        pageRoot.getHeight() - boxStyle.getBottomBorderWidth() - footerHeight);
    pageRoot.addChild(footer);
    setFooter(footer);
    footer.setParent(pageRoot);

    /** set position and dimension for body */
    ContainerArea body = new BlockContainerArea();
    int bodyLeft = getDimensionValue(pageContent, pageContent.getLeftWidth(), pageRoot.getWidth());
    bodyLeft = Math.max(0, bodyLeft);
    bodyLeft = Math.min(pageRoot.getWidth(), bodyLeft);
    body.setPosition(
        boxStyle.getLeftBorderWidth() + bodyLeft, headerHeight + boxStyle.getRightBorderWidth());
    int bodyRight =
        getDimensionValue(pageContent, pageContent.getRightWidth(), pageRoot.getWidth());
    bodyRight = Math.max(0, bodyRight);
    bodyRight = Math.min(pageRoot.getWidth() - bodyLeft, bodyRight);

    body.setWidth(
        pageRoot.getWidth()
            - bodyLeft
            - bodyRight
            - boxStyle.getLeftBorderWidth()
            - boxStyle.getRightBorderWidth());
    body.setHeight(
        pageRoot.getHeight()
            - headerHeight
            - footerHeight
            - boxStyle.getTopBorderWidth()
            - boxStyle.getBottomBorderWidth());
    setBody(body);
    if (overFlowType == IPDFRenderOption.CLIP_CONTENT
        || overFlowType == IPDFRenderOption.OUTPUT_TO_MULTIPLE_PAGES) {
      pageRoot.setNeedClip(true);
      body.setNeedClip(true);
    } else {
      pageRoot.setNeedClip(false);
    }
    // TODO add left area and right area;
  }