public override void OnStartPage(PdfWriter writer, Document document)
            {
                PdfContentByte canvas = writer.DirectContentUnder;

                Rectangle   rect     = document.PageSize;
                PdfTemplate template = canvas.CreateTemplate(20, 16);
                Image       total    = null;

                try {
                    total = Image.GetInstance(template);
                } catch (BadElementException e) {
                }
                total.SetAccessibleAttribute(PdfName.ALT, new PdfString("Total"));
                templates.Add(template);

                PdfPTable table = CreateTable(writer.PageNumber, total);

                if (table != null)
                {
                    canvas.OpenMCBlock(headerTable);
                    canvas.OpenMCBlock(headerTable.GetBody());
                    table.WriteSelectedRows(0, -1, document.LeftMargin,
                                            rect.GetTop(marginTop), canvas);
                    canvas.CloseMCBlock(headerTable.GetBody());
                    canvas.CloseMCBlock(headerTable);
                }
            }
Beispiel #2
0
        virtual public int Layout(PdfContentByte canvas, bool useAscender, bool simulate, float llx, float lly, float urx, float ury)
        {
            float leftX  = Math.Min(llx, urx);
            float maxY   = Math.Max(lly, ury);
            float minY   = Math.Min(lly, ury);
            float rightX = Math.Max(llx, urx);

            yLine = maxY;
            bool contentCutByFixedHeight = false;

            if (width != null && width > 0)
            {
                if (width < rightX - leftX)
                {
                    rightX = leftX + (float)width;
                }
                else if (width > rightX - leftX)
                {
                    return(ColumnText.NO_MORE_COLUMN);
                }
            }
            else if (percentageWidth != null)
            {
                contentWidth = (rightX - leftX) * (float)percentageWidth;
                rightX       = leftX + contentWidth;
            }
            else if (percentageWidth == null)
            {
                if (this.floatType == FloatType.NONE && (this.display == DisplayType.DEFAULT_NULL_VALUE ||
                                                         this.display == DisplayType.BLOCK || this.display == DisplayType.LIST_ITEM ||
                                                         this.display == DisplayType.RUN_IN))
                {
                    contentWidth = rightX - leftX;
                }
            }

            if (height != null && height > 0)
            {
                if (height < maxY - minY)
                {
                    contentCutByFixedHeight = true;
                    minY = maxY - (float)height;
                }
                else if (height > maxY - minY)
                {
                    return(ColumnText.NO_MORE_COLUMN);
                }
            }
            else if (percentageHeight != null)
            {
                if (percentageHeight < 1.0)
                {
                    contentCutByFixedHeight = true;
                }
                contentHeight = (maxY - minY) * (float)percentageHeight;
                minY          = maxY - contentHeight;
            }

            if (!simulate && position == PdfDiv.PositionType.RELATIVE)
            {
                float?translationX = null;
                if (left != null)
                {
                    translationX = left;
                }
                else if (right != null)
                {
                    translationX = -right;
                }
                else
                {
                    translationX = 0f;
                }

                float?translationY = null;
                if (top != null)
                {
                    translationY = -top;
                }
                else if (bottom != null)
                {
                    translationY = bottom;
                }
                else
                {
                    translationY = 0f;
                }
                canvas.SaveState();
                canvas.Transform(new AffineTransform(1f, 0, 0, 1f, translationX.Value, translationY.Value));
            }

            if (!simulate)
            {
                if ((backgroundColor != null || backgroundImage != null) && getActualWidth() > 0 && getActualHeight() > 0)
                {
                    float backgroundWidth  = getActualWidth();
                    float backgroundHeight = getActualHeight();
                    if (width != null)
                    {
                        backgroundWidth = width > 0 ? (float)width : 0;
                    }
                    if (height != null)
                    {
                        backgroundHeight = height > 0 ? (float)height : 0;
                    }
                    if (backgroundWidth > 0 && backgroundHeight > 0)
                    {
                        Rectangle background = new Rectangle(leftX, maxY - backgroundHeight, leftX + backgroundWidth, maxY);
                        if (backgroundColor != null)
                        {
                            background.BackgroundColor = backgroundColor;
                            PdfArtifact artifact = new PdfArtifact();
                            canvas.OpenMCBlock(artifact);
                            canvas.Rectangle(background);
                            canvas.CloseMCBlock(artifact);
                        }
                        if (backgroundImage != null)
                        {
                            if (backgroundImageWidth == null)
                            {
                                backgroundImage.ScaleToFit(background);
                            }
                            else
                            {
                                backgroundImage.ScaleAbsolute((float)backgroundImageWidth, backgroundImageHeight);
                            }
                            backgroundImage.SetAbsolutePosition(background.Left, background.Bottom);
                            canvas.OpenMCBlock(backgroundImage);
                            canvas.AddImage(backgroundImage);
                            canvas.CloseMCBlock(backgroundImage);
                        }
                    }
                }
            }

            if (percentageWidth == null)
            {
                contentWidth = 0;
            }
            if (percentageHeight == null)
            {
                contentHeight = 0;
            }

            minY   += paddingBottom;
            leftX  += paddingLeft;
            rightX -= paddingRight;

            yLine -= paddingTop;

            int status = ColumnText.NO_MORE_TEXT;

            if (content.Count > 0)
            {
                if (floatLayout == null)
                {
                    List <IElement> floatingElements = new List <IElement>(content);
                    floatLayout = new FloatLayout(floatingElements, useAscender);
                    floatLayout.RunDirection = runDirection;
                }

                floatLayout.SetSimpleColumn(leftX, minY, rightX, yLine);
                if (borderTopStyle != BorderTopStyle.NONE)
                {
                    floatLayout.compositeColumn.IgnoreSpacingBefore = false;
                }
                status = floatLayout.Layout(canvas, simulate);
                yLine  = floatLayout.YLine;

                if (percentageWidth == null && contentWidth < floatLayout.FilledWidth)
                {
                    contentWidth = floatLayout.FilledWidth;
                }
            }


            if (!simulate && position == PdfDiv.PositionType.RELATIVE)
            {
                canvas.RestoreState();
            }

            yLine -= paddingBottom;
            if (percentageHeight == null)
            {
                contentHeight = maxY - yLine;
            }

            if (percentageWidth == null)
            {
                contentWidth += paddingLeft + paddingRight;
            }

            return(contentCutByFixedHeight ? ColumnText.NO_MORE_TEXT : status);
        }
        public int Layout(PdfContentByte canvas, bool simulate)
        {
            compositeColumn.Canvas = canvas;
            int status = ColumnText.NO_MORE_TEXT;

            List <IElement> floatingElements = new List <IElement>();
            List <IElement> content          = simulate ? new List <IElement>(this.content) : this.content;

            while (content.Count > 0)
            {
                if (content[0] is PdfDiv)
                {
                    PdfDiv floatingElement = (PdfDiv)content[0];
                    if (floatingElement.Float == PdfDiv.FloatType.LEFT || floatingElement.Float == PdfDiv.FloatType.RIGHT)
                    {
                        floatingElements.Add(floatingElement);
                        content.RemoveAt(0);
                    }
                    else
                    {
                        if (floatingElements.Count > 0)
                        {
                            status = FloatingLayout(floatingElements, simulate);
                            if ((status & ColumnText.NO_MORE_TEXT) == 0)
                            {
                                break;
                            }
                        }

                        content.RemoveAt(0);

                        status = floatingElement.Layout(canvas, useAscender, true, floatLeftX, minY, floatRightX, yLine);

                        if (!simulate)
                        {
                            canvas.OpenMCBlock(floatingElement);
                            status = floatingElement.Layout(canvas, useAscender, simulate, floatLeftX, minY, floatRightX, yLine);
                            canvas.CloseMCBlock(floatingElement);
                        }

                        if (floatingElement.getActualWidth() > filledWidth)
                        {
                            filledWidth = floatingElement.getActualWidth();
                        }
                        if ((status & ColumnText.NO_MORE_TEXT) == 0)
                        {
                            content.Insert(0, floatingElement);
                            yLine = floatingElement.YLine;
                            break;
                        }
                        else
                        {
                            yLine -= floatingElement.getActualHeight();
                        }
                    }
                }
                else
                {
                    floatingElements.Add(content[0]);
                    content.RemoveAt(0);
                }
            }

            if ((status & ColumnText.NO_MORE_TEXT) != 0 && floatingElements.Count > 0)
            {
                status = FloatingLayout(floatingElements, simulate);
            }

            content.InsertRange(0, floatingElements);

            return(status);
        }
Beispiel #4
0
        virtual public int Layout(PdfContentByte canvas, bool useAscender, bool simulate, float llx, float lly, float urx, float ury)
        {
            float leftX  = Math.Min(llx, urx);
            float maxY   = Math.Max(lly, ury);
            float minY   = Math.Min(lly, ury);
            float rightX = Math.Max(llx, urx);

            yLine = maxY;
            bool contentCutByFixedHeight = false;

            if (width != null && width > 0)
            {
                if (width < rightX - leftX)
                {
                    rightX = leftX + (float)width;
                }
                else if (width > rightX - leftX)
                {
                    return(ColumnText.NO_MORE_COLUMN);
                }
            }
            else if (percentageWidth != null)
            {
                contentWidth = (rightX - leftX) * (float)percentageWidth;
                rightX       = leftX + contentWidth;
            }

            if (height != null && height > 0)
            {
                if (height < maxY - minY)
                {
                    contentCutByFixedHeight = true;
                    minY = maxY - (float)height;
                }
                else if (height > maxY - minY)
                {
                    return(ColumnText.NO_MORE_COLUMN);
                }
            }
            else if (percentageHeight != null)
            {
                if (percentageHeight < 1.0)
                {
                    contentCutByFixedHeight = true;
                }
                contentHeight = (maxY - minY) * (float)percentageHeight;
                minY          = maxY - contentHeight;
            }

            if (!simulate && position == PdfDiv.PositionType.RELATIVE)
            {
                float?translationX = null;
                if (left != null)
                {
                    translationX = left;
                }
                else if (right != null)
                {
                    translationX = -right;
                }
                else
                {
                    translationX = 0f;
                }

                float?translationY = null;
                if (top != null)
                {
                    translationY = -top;
                }
                else if (bottom != null)
                {
                    translationY = bottom;
                }
                else
                {
                    translationY = 0f;
                }
                canvas.SaveState();
                canvas.Transform(new AffineTransform(1f, 0, 0, 1f, translationX.Value, translationY.Value));
            }

            if (!simulate)
            {
                if (backgroundColor != null && getActualWidth() > 0 && getActualHeight() > 0)
                {
                    float backgroundWidth  = getActualWidth();
                    float backgroundHeight = getActualHeight();
                    if (width != null)
                    {
                        backgroundWidth = width > 0 ? (float)width : 0;
                    }
                    if (height != null)
                    {
                        backgroundHeight = height > 0 ? (float)height : 0;
                    }
                    if (backgroundWidth > 0 && backgroundHeight > 0)
                    {
                        Rectangle background = new Rectangle(leftX, maxY - backgroundHeight, leftX + backgroundWidth, maxY);
                        background.BackgroundColor = backgroundColor;
                        PdfArtifact artifact = new PdfArtifact();
                        canvas.OpenMCBlock(artifact);
                        canvas.Rectangle(background);
                        canvas.CloseMCBlock(artifact);
                    }
                }
            }

            if (percentageWidth == null)
            {
                contentWidth = 0;
            }
            if (percentageHeight == null)
            {
                contentHeight = 0;
            }

            minY   += paddingBottom;
            leftX  += paddingLeft;
            rightX -= paddingRight;

            yLine -= paddingTop;

            int status = ColumnText.NO_MORE_TEXT;

            if (content.Count > 0)
            {
                if (floatLayout == null)
                {
                    List <IElement> floatingElements = new List <IElement>(content);
                    floatLayout = new FloatLayout(floatingElements, useAscender);
                }

                floatLayout.SetSimpleColumn(leftX, minY, rightX, yLine);
                status = floatLayout.Layout(canvas, simulate);
                yLine  = floatLayout.YLine;
                if (percentageWidth == null && contentWidth < floatLayout.FilledWidth)
                {
                    contentWidth = floatLayout.FilledWidth;
                }
            }


            if (!simulate && position == PdfDiv.PositionType.RELATIVE)
            {
                canvas.RestoreState();
            }

            yLine -= paddingBottom;
            if (percentageHeight == null)
            {
                contentHeight = maxY - yLine;
            }

            if (percentageWidth == null)
            {
                contentWidth += paddingLeft + paddingRight;
            }

            return(contentCutByFixedHeight ? ColumnText.NO_MORE_TEXT : status);
        }