C#图形字符串垂直方向从底部开始



我需要在print Document方法中使用Graphics.DrawString,一个垂直方向的字符串,我对字符串宽度有限制,问题是字符串是从左到右写的,我需要第一行在右边我使用下面的方法

SizeF s = e.Graphics.MeasureString(str1, po.defaultF,la1, StringFormat.GenericTypographic);
RectangleF rec=new RectangleF();
StringFormat strF=new StringFormat();
strF.FormatFlags=StringFormatFlags.DirectionVertical;
rec.Height=s.Width+15;
rec.Width=s.Height+5;
rec.X =0;
rec.Y=0;
e.Graphics.DrawString(str1, po.defaultF, Brushes.Black, rec, strF);

正如Hans所评论的,RotateTransform可以用来翻转字符串:

strF.Alignment = StringAlignment.Far;
e.Graphics.TranslateTransform(rec.Right, rec.Bottom);
e.Graphics.RotateTransform(180);
e.Graphics.DrawString(str1, po.defaultF, Brushes.Black, rec, strF);

TranslateTransform将坐标系的原点更改为rec矩形的右下角,然后RotateTransform将其翻转180度,然后字符串的对齐方式更改为Far,以将字符串放置在原始字符串绘制的相同位置。

您应该看看这个例子:

http://msdn.microsoft.com/en-us/library/aa287525%28v=vs.71%29.aspx

它应该完全按照你的要求来做。

编辑:

从右向左绘制可能很愚蠢:

SizeF s = e.Graphics.MeasureString(str1, po.defaultF,la1, 
StringFormat.GenericTypographic);
RectangleF rec=new RectangleF();
StringFormat strF=new StringFormat();
strF.FormatFlags=StringFormatFlags.DirectionVertical;
rec.Height=s.Width+15;
rec.Width=s.Height+5;
rec.X =0;
rec.Y=0;
string[] strRightToLeft = str1.Split('n');
Array.Reverse(strRightToLeft);
e.Graphics.DrawString(String.Concat(str1), po.defaultF, Brushes.Black, rec, strF);

解决方案是使用RotateTransform(90),而不使用StringFormatFlags.DirectionVertical这是代码的和平:

Rectangle rec = new Rectangle();
rec.Height = 2 * po.medF.Height;
rec.Width=100;
rec.X = 0;
rec.Y = 0;
SizeF s;
String str = "your Text";
StringFormat strf = new StringFormat();
strf.Alignment = StringAlignment.Center;    
rec.X = 0;
rec.Y = 0;
e.Graphics.TranslateTransform(X1, Y1);
e.Graphics.RotateTransform(90);
e.Graphics.DrawString(str, po.medF, Brushes.Black, rec, strf);
e.Graphics.ResetTransform();

我根据@LarsTech的回答改编了代码片段,它对我的作用如下:

strF = new StringFormat();
strF.Alignment = StringAlignment.Near;
strF.FormatFlags = StringFormatFlags.DirectionVertical | StringFormatFlags.DirectionRightToLeft;
e.Graphics.TranslateTransform(rec.Right, rec.Bottom);
e.Graphics.RotateTransform(180);
e.Graphics.DrawString(str1, po.defaultF, Brushes.Black, rec, strF);

文本将按照从下到上、左对齐的方式绘制。

最新更新