int sub = 0;

private void printText(string text, System.Drawing.Printing.PrintPageEventArgs e)

{

     //取得Graphics实例

     Graphics g = e.Graphics;

     //获得相关点坐标、长度、宽度

     int x = e.PageSettings.Margins.Left;

    int y = e.PageSettings.Margins.Right;

    int width = e.PageSettings.PaperSize.Width - e.PageSettings.Margins.Left - e.PageSettings.Margins.Right;

    int height = e.PageSettings.PaperSize.Height - e.PageSettings.Margins.Top - e.PageSettings.Margins.Bottom;

    int charnum;

    int line;

    //设置字体

Font font = new Font("宋体",15);

//打印string

    g.MeasureString(text.Substring(sub), font, new SizeF(width, height - 10), new StringFormat(), out charnum, out line);

    //设置截取位置

    g.DrawString(text.Substring(sub), font, Brushes.Black, new RectangleF(x, y, width, height), new StringFormat());

    sub += charnum;

    if (sub < this.textBox1.Text.Length)

    {

        e.HasMorePages = true;

    }

    else

    {

         e.HasMorePages = false;

         sub = 0;

}

}

//打印预览

private void button1_Click(object sender, EventArgs e)

{

     //注意指定其Document(获取或设置要预览的文档)属性

     this.printPreviewDialog1.Document = this.printDocument1;

    //ShowDialog方法:将窗体显示为模式对话框,并将当前活动窗口设置为它的所有者

     this.printPreviewDialog1.ShowDialog();          

}

//打印

private void button2_Click(object sender, EventArgs e)

{

     //注意指定Document(获取或设置一个值)属性

     this.printDialog1.Document = this.printDocument1;

     //ShowDialog方法:用默认的所有者运行通用对话框

     if (this.printDialog1.ShowDialog() == DialogResult.OK)

     {                                               //DialogResult指定标识符以指定对话框的返回值

           //触发PrintDocument的PrintPage事件

           this.printDocument1.Print();    //Print方法:开始文档的打印进程

     }

}

//printDocument1控件的PrintPage事件(双击printDocument1控件生成)

 private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)

{

      printText(textBox1.Text, e);                      //打印文本

   e.Graphics.DrawImage(pictureBox1.Image, 20, 20);   //打印图片

}

 // printDocument1控件:定义一个向打印机发送输出的对象;

 // printDialog1控件:显示一个对话框,允许用户选择打印机并选择其他打印选项;

 // printPreviewDialog1控件:显示一个对话框,向用户显示关联文档打印时的样子;打印功能及打印预览实现(C#--WinForm)