Beispiel #1
0
        /* (non-Javadoc)
         * @see com.itextpdf.layout.renderer.TextRenderer#layout(com.itextpdf.layout.layout.LayoutContext)
         */
        public override LayoutResult Layout(LayoutContext layoutContext)
        {
            PageCountType pageCountType = (PageCountType)this.GetProperty <PageCountType?>(Html2PdfProperty.PAGE_COUNT_TYPE
                                                                                           );

            if (pageCountType == PageCountType.CURRENT_PAGE_NUMBER)
            {
                SetText(layoutContext.GetArea().GetPageNumber().ToString());
            }
            else
            {
                if (pageCountType == PageCountType.TOTAL_PAGE_COUNT)
                {
                    IRenderer rootRenderer = this;
                    while (rootRenderer is AbstractRenderer && ((AbstractRenderer)rootRenderer).GetParent() != null)
                    {
                        rootRenderer = ((AbstractRenderer)rootRenderer).GetParent();
                    }
                    if (rootRenderer is HtmlDocumentRenderer && ((HtmlDocumentRenderer)rootRenderer).GetEstimatedNumberOfPages
                            () > 0)
                    {
                        SetText(((HtmlDocumentRenderer)rootRenderer).GetEstimatedNumberOfPages().ToString());
                    }
                    else
                    {
                        if (rootRenderer is DocumentRenderer && rootRenderer.GetModelElement() is Document)
                        {
                            SetText(((Document)rootRenderer.GetModelElement()).GetPdfDocument().GetNumberOfPages().ToString());
                        }
                    }
                }
            }
            return(base.Layout(layoutContext));
        }
Beispiel #2
0
        /* (non-Javadoc)
         * @see com.itextpdf.layout.renderer.TextRenderer#layout(com.itextpdf.layout.layout.LayoutContext)
         */
        public override LayoutResult Layout(LayoutContext layoutContext)
        {
            PageCountType pageCountType = (PageCountType)this.GetProperty <PageCountType?>(Html2PdfProperty.PAGE_COUNT_TYPE
                                                                                           );
            String previousText = GetText().ToString();
            // If typography is enabled and the page counter element has a non-default direction,
            // iText processes its content (see LineRenderer#updateBidiLevels) before layouting it.
            // This might result in an ArrayIndexOutOfBounds exception, because currently iText updates the page counter's content on layout.
            // To solve this, this workaround has been implemented: the renderer's strToBeConverted shouldn't be updated by layout.
            bool textHasBeenReplaced = false;

            if (pageCountType == PageCountType.CURRENT_PAGE_NUMBER)
            {
                SetText(HtmlUtils.ConvertNumberAccordingToGlyphStyle(digitsGlyphStyle, layoutContext.GetArea().GetPageNumber
                                                                         ()));
                textHasBeenReplaced = true;
            }
            else
            {
                if (pageCountType == PageCountType.TOTAL_PAGE_COUNT)
                {
                    IRenderer rootRenderer = this;
                    while (rootRenderer is AbstractRenderer && ((AbstractRenderer)rootRenderer).GetParent() != null)
                    {
                        rootRenderer = ((AbstractRenderer)rootRenderer).GetParent();
                    }
                    if (rootRenderer is HtmlDocumentRenderer && ((HtmlDocumentRenderer)rootRenderer).GetEstimatedNumberOfPages
                            () > 0)
                    {
                        SetText(HtmlUtils.ConvertNumberAccordingToGlyphStyle(digitsGlyphStyle, ((HtmlDocumentRenderer)rootRenderer
                                                                                                ).GetEstimatedNumberOfPages()));
                        textHasBeenReplaced = true;
                    }
                    else
                    {
                        if (rootRenderer is DocumentRenderer && rootRenderer.GetModelElement() is Document)
                        {
                            SetText(HtmlUtils.ConvertNumberAccordingToGlyphStyle(digitsGlyphStyle, ((Document)rootRenderer.GetModelElement
                                                                                                        ()).GetPdfDocument().GetNumberOfPages()));
                            textHasBeenReplaced = true;
                        }
                    }
                }
            }
            LayoutResult result = base.Layout(layoutContext);

            if (textHasBeenReplaced)
            {
                SetText(previousText);
            }
            return(result);
        }