在我的结算应用程序中,使用Graphics.DrawString方法等打印帐单。当使用带有自动换行的Graphics.DrawString绘制ItemName时,它会将单词包装成多行。所以消耗了很多行。
我使用简单的代码重新创建了问题。使用此代码,我期望输出如下图: Expected Output designed using MS Paint
这是我的示例代码。
string FONTNAME = "Tahoma";
text = "C# is a simple, modern, general-purpose, object-oriented programming language";
e.Graphics.DrawString(text, new Font(FONTNAME, 12, FontStyle.Bold), drawBrush, new RectangleF(0, 0, 100.0F, 200F), new StringFormat());
e.Graphics.DrawRectangle(new System.Drawing.Pen(drawBrush), 0, 0, 100.0F, 200F);
但我得到以下输出: Output Image
有没有选项来打破单词而不是自动换行?
答案 0 :(得分:1)
不,Graphics.DrawString
没有任何选项可以打破字符(而不是整个单词)。
要控制换行,您可以传递使用StringFormat
初始化的StringFormatFlags
对象。唯一相关的标志是StringFormatFlags.NoWrap
。 .NET文档并不是很有用,但是如果我们查看GDI+ documentation(它是底层库),我们会看到:
<强> StringFormatFlagsNoWrap 强>
指定禁用将文本换行到下一行。 ...在矩形内绘制文本时,默认情况下,文本在矩形边界内的最后一个单词边界处被破坏并包裹到下一行。
因此,唯一的选择是在字边界处包装,或根本不执行包装。
要获得所需的输出,您需要逐个字符地测量并绘制多个字符串(每行一个)。