新手求问 .如何使用 PrintDocument 字符串换行打印 呢 ??PrintPage 中 完整代码. 
DrawString// 获取字符串.
// 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++;
}

解决方案 »

  1.   

    string outStr = "第一行"+Environment.NewLine+"第二行。"
    .....,
    其实就是在需要换行的地方加回车换行符。
      

  2.   

    不知道什么意思,换行和字符长度有什么关系吗
    字母和中文用Length属性是一样的,一个中文字符的Length是1。
      

  3.   

    mizuho_2006 大哥. 
    我说的不是 属性的长度..是字体的长度..
    就好像 啊啊啊
    aaa如果用 length 来判断长度的话。就会出现这种 过长和过短的情况。
      

  4.   

    g.DrawString(line, titleFont, brush ,leftMargin, yPosition, fmt);
    GDI+绘制 line字符串 在(leftMargin,yPosition)位置绘制 跟换行有啥关系啊,看不懂
      

  5.   

    leftMargin,yPosition
     是坐标换行方法..
     因为单行绘制的话不使用 增加 y 。会出现打印在同一行..
    如果是直接 使用g.DrawString(整表,titleFont, brush ,leftMargin, yPosition, fmt);
    缺陷就是 无法做到换行操作。在 制表的时候就 可以加 换行的操作。但是会出现上边提到的 长短不一的情况。
    网上查说 StringFormat , 在打印的时候 DrawString 加入 StringFormat 可以完美解决换行。但是试来试去都不行。