无论我是否使用XTextFormatter,对于LayoutRectangle必须有0的高度或类似的情况,我都会遇到同样的错误。
new PdfSharp.Drawing.Layout.XTextFormatter(_gfx).DrawString(text
, new PdfSharp.Drawing.XFont(fontName, fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle)
, new PdfSharp.Drawing.XSolidBrush(PdfSharp.Drawing.XColor.FromArgb(foreColour))
, new PdfSharp.Drawing.XRect(new PdfSharp.Drawing.XPoint(xPos, yPos), new PdfSharp.Drawing.XPoint(xLimit, yLimit))
, PdfSharp.Drawing.XStringFormats.Default);fontStyle类型为System.Drawing.FontStyle foreColour,类型为System.Drawing.Color I已从具有方位=景观的PdfPage预定义_gfx,大小=字母xPosE 210和E 111yPos<代码>E 212E 212类型为double类型的参数,与E 113xLimitE 214和E 115yLimitE 216相同。
我得到运行时错误,LayoutRectangle必须有0(0)的高度.
每定义一个矩形就意味着有一个高度,否则就称它为直线!我不明白!..
我直接尝试使用XGraphics.DrawString()方法,并得到了相同的错误。我似乎不能使用LayoutRectangle,但必须手动管理文本是否适合于所需的区域。
var textFont = new PdfSharp.Drawing.XFont(fontName, fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle);
while (xPos + _gfx.MeasureString(text, textFont).Width > xLimit)
textFont = new PdfSharp.Drawing.XFont(fontName, --fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle);
while (yPos + _gfx.MeasureString(text, textFont).Height > yLimit && fontSize > 0)
textFont = new PdfSharp.Drawing.XFont(fontName, --fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle);
_gfx.DrawString(text
, textFont
, new PdfSharp.Drawing.XSolidBrush(PdfSharp.Drawing.XColor.FromArgb(foreColour))
, new PdfSharp.Drawing.XPoint(xPos, yPos));尽管yPos变量值是完全相同的值!
*yPos = Page.Height * .4093,页面高度的40%,93%。*
下面是我试图做的一个例子:
“你好世界!”“你好,世界!”
我得到的是:
"Hello World!" “你好世界!”
由于不同的打印面积限制和字体大小以及不同的字体风格,我不能只把这些写成一个简单的句子,包括正确的空格数。
发布于 2009-08-31 08:35:09
引用错误信息可以帮助他人帮助您。
错误消息如下:
DrawString:使用XLineAlignment.BaseLine,布局矩形的高度必须为0。
文本将在一行对齐,因此高度必须为0。是的,这是一条线。如果指定矩形,则使用不同的对齐方式。
TextLayout示例演示了如何格式化文本。
Graphics示例还展示了如何布局文本(单行文本,没有自动换行;TextLayout示例中显示的技术使用XTextFormatter类自动处理换行)。
发布于 2009-08-31 16:35:07
在试图了解文本定位与PdfSharp的工作方式时,我注意到DrawString()方法写在我们指定的Y坐标之上。
如果我想写在(0,100)(x,y),这指向左下角,而我认为这是左上角坐标。因此,我应该指定的文本字符串Y坐标是100 + string.Height * .6。
PdfDocument pdfDoc = new PdfDocument();
PdfPage pdfPage = new pdfPage();
pdfPage.Size = PageSize.Letter;
pdfPage.Orientation = Orientation.Landscape;
pdfDoc.Pages.Add(pdfPage);
double posX = 0;
double posY = pdfPage.Height * .4093;
string helloString = "Hello"
string worldString = "World!"
XFont helloFont = new XFont("Helvetica", 25, XFontStyle.Regular);
XFont worldFont = new XFont("Helvetica", 270, XFontStyle.Bold);
using(var pdfGfx = XGraphics.FromPdfPage(pdfPage)) { // assuming the default Point UOM
XSize helloStringSize = pdfGfx.MeasureString(helloString, helloFont);
XSize worldStringSize = pdfGfx.MeasureString(worldString, worldFont);
pdfGfx.DrawString(helloString
, helloFont
, XBrushes.Black
, posX
, posY + helloStringSize.Height * .6
, XStringFormats.Default);
pdfGfx.DrawString(worldString
, worldFont
, XBrushes.Black
, pdfPage.Width * .3978
, posY + (worldStringSize.Height + helloStringSize.Height) * .6
, XStringFormats.Default);}
您可能会想知道,当我想要在Y坐标下编写字符串时,为什么我只添加了字符串大小的60%?这是因为字体的全部高度包括某种顶部的跳跃。因此,计算结果将不像预期的那样。另一方面,如果你需要的话,你不需要关心一个飞跃。在我的特殊情况下,我不需要跳跃,所以我必须把它从绳子的高度上取下来。
如果你觉得我的解释需要更准确的细节,请随意添加它们作为评论或随时通知我,以便我可以包括它们。
谢谢!
https://stackoverflow.com/questions/1341680
复制相似问题