C#图形字符串垂直方向从底部开始
本文关键字:底部 开始 方向 垂直 图形 图形字符 字符串 | 更新日期: 2023-09-27 18:21:13
我需要在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);
文本将按照从下到上、左对齐的方式绘制。