本文整理匯總了C#中iTextSharp.text.pdf.PdfContentByte.OpenMCBlock方法的典型用法代碼示例。如果您正苦於以下問題:C# PdfContentByte.OpenMCBlock方法的具體用法?C# PdfContentByte.OpenMCBlock怎麽用?C# PdfContentByte.OpenMCBlock使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類iTextSharp.text.pdf.PdfContentByte
的用法示例。
在下文中一共展示了PdfContentByte.OpenMCBlock方法的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: WriteLineToContent
/**
* Writes a text line to the document. It takes care of all the attributes.
* <P>
* Before entering the line position must have been established and the
* <CODE>text</CODE> argument must be in text object scope (<CODE>beginText()</CODE>).
* @param line the line to be written
* @param text the <CODE>PdfContentByte</CODE> where the text will be written to
* @param graphics the <CODE>PdfContentByte</CODE> where the graphics will be written to
* @param currentValues the current font and extra spacing values
* @param ratio
* @throws DocumentException on error
*/
internal float WriteLineToContent(PdfLine line, PdfContentByte text, PdfContentByte graphics, Object[] currentValues, float ratio) {
PdfFont currentFont = (PdfFont)(currentValues[0]);
float lastBaseFactor = (float)currentValues[1];
//PdfChunk chunkz;
int numberOfSpaces;
int lineLen;
bool isJustified;
float hangingCorrection = 0;
float hScale = 1;
float lastHScale = float.NaN;
float baseWordSpacing = 0;
float baseCharacterSpacing = 0;
float glueWidth = 0;
float lastX = text.XTLM + line.OriginalWidth;
numberOfSpaces = line.NumberOfSpaces;
lineLen = line.GetLineLengthUtf32();
// does the line need to be justified?
isJustified = line.HasToBeJustified() && (numberOfSpaces != 0 || lineLen > 1);
int separatorCount = line.GetSeparatorCount();
if (separatorCount > 0) {
glueWidth = line.WidthLeft / separatorCount;
}
else if (isJustified && separatorCount == 0) {
if (line.NewlineSplit && line.WidthLeft >= (lastBaseFactor * (ratio * numberOfSpaces + lineLen - 1))) {
if (line.RTL) {
text.MoveText(line.WidthLeft - lastBaseFactor * (ratio * numberOfSpaces + lineLen - 1), 0);
}
baseWordSpacing = ratio * lastBaseFactor;
baseCharacterSpacing = lastBaseFactor;
}
else {
float width = line.WidthLeft;
PdfChunk last = line.GetChunk(line.Size - 1);
if (last != null) {
String s = last.ToString();
char c;
if (s.Length > 0 && hangingPunctuation.IndexOf((c = s[s.Length - 1])) >= 0) {
float oldWidth = width;
width += last.Font.Width(c) * 0.4f;
hangingCorrection = width - oldWidth;
}
}
float baseFactor = width / (ratio * numberOfSpaces + lineLen - 1);
baseWordSpacing = ratio * baseFactor;
baseCharacterSpacing = baseFactor;
lastBaseFactor = baseFactor;
}
}
else if (line.alignment == Element.ALIGN_LEFT || line.alignment == Element.ALIGN_UNDEFINED) {
lastX -= line.WidthLeft;
}
int lastChunkStroke = line.LastStrokeChunk;
int chunkStrokeIdx = 0;
float xMarker = text.XTLM;
float baseXMarker = xMarker;
float yMarker = text.YTLM;
bool adjustMatrix = false;
float tabPosition = 0;
// looping over all the chunks in 1 line
foreach (PdfChunk chunk in line) {
if (IsTagged(writer) && chunk.accessibleElement != null) {
text.OpenMCBlock(chunk.accessibleElement);
}
BaseColor color = chunk.Color;
float fontSize = chunk.Font.Size;
float ascender;
float descender;
if (chunk.IsImage())
{
ascender = chunk.Height();
descender = 0;
}
else
{
ascender = chunk.Font.Font.GetFontDescriptor(BaseFont.ASCENT, fontSize);
descender = chunk.Font.Font.GetFontDescriptor(BaseFont.DESCENT, fontSize);
}
hScale = 1;
if (chunkStrokeIdx <= lastChunkStroke) {
float width;
if (isJustified) {
width = chunk.GetWidthCorrected(baseCharacterSpacing, baseWordSpacing);
}
else {
//.........這裏部分代碼省略.........
示例2: OpenTableBlock
private PdfPTableBody OpenTableBlock(PdfPTableBody block, PdfContentByte canvas) {
if (canvas.writer.GetStandardStructElems().Contains(block.Role)) {
canvas.OpenMCBlock(block);
return block;
}
return null;
}
示例3: Layout
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) {
//.........這裏部分代碼省略.........
示例4: Layout
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);
//.........這裏部分代碼省略.........
示例5: Layout
virtual 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 (floatingElement.KeepTogether && (status & ColumnText.NO_MORE_TEXT) == 0)
{
//check for empty page
if (compositeColumn.Canvas.PdfDocument.currentHeight > 0 || yLine != maxY)
{
content.Insert(0, floatingElement);
break;
}
}
if (!simulate)
{
canvas.OpenMCBlock(floatingElement);
if (floatingElement.Position == PdfDiv.PositionType.ABSOLUTE)
{
if (floatingElement.Left == null && floatingElement.Right != null)
status = floatingElement.Layout(canvas, useAscender, simulate, floatRightX - floatingElement.ContentWidth - 1, minY, floatRightX, yLine);
else
status = floatingElement.Layout(canvas, useAscender, simulate, floatLeftX, minY, floatRightX, yLine);
}
else
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;
}