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); } }
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); }
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); }