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