日期:2014-05-18  浏览次数:20936 次

c# winform.新手求问 关于PrintDocument 字符串换行打印
新手求问 .如何使用 PrintDocument 字符串换行打印 呢 ??

PrintPage 中 完整代码. 
DrawString
C# code

// 获取字符串.
// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r\n aaaaaaaa   bbbbbbbbbbb ccccccccccccccc \r\n dddddddddd
// 某些行字符串 过长。
StringReader lineReader = new StringReader(this.GetPrintSB().ToString()); 
// 获得绘图对象
Graphics g = e.Graphics;
// 定义字体
Font titleFont = new Font("宋体", 9, FontStyle.Bold);
// 画刷
Brush brush = new SolidBrush(Color.Black);
// 行数,用于计算当前高度。
int count = 0;

/* 
 * 网上查 说可以 自动换行. 但是我使用后没什么反应。不知道是不是用错了..
 * 使用 Rectangle 是可以换行.. 不过每行长度不一样。高度 很难控制(并且ReadLine 下1行字符串打印的预定高度会变形)。
 * 而且会按单词换行。
*/
StringFormat fmt = new StringFormat();
fmt.LineAlignment = StringAlignment.Center;
fmt.FormatFlags = StringFormatFlags.LineLimit;

float topMargin = e.MarginBounds.Top; // 上边距
float leftMargin = 10; // 左边距
while((line=lineReader.ReadLine()) != null)
{
// DrawString方式进行打印。
yPosition = topMargin + (count * titleFont.GetHeight(g));
g.DrawString(line, titleFont, brush ,leftMargin, yPosition, fmt);
count++;
}





------解决方案--------------------
\r\n 换行
------解决方案--------------------
string outStr = "第一行"+Environment.NewLine+"第二行。"
.....,
其实就是在需要换行的地方加回车换行符。
------解决方案--------------------
"\r\n"就可以
------解决方案--------------------
g.DrawString(line, titleFont, brush ,leftMargin, yPosition, fmt);
GDI+绘制 line字符串 在(leftMargin,yPosition)位置绘制 跟换行有啥关系啊,看不懂