C#打印

public partial class Form1 : Form
{
PrintDocument printDocument;
StringReader lineReader = null;
public Form1()
{
InitializeComponent();
// 这里的printDocument对象可以通过将PrintDocument控件拖放到窗体上来实现,注意要设置该控件的PrintPage事件。
printDocument=new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler (this.printDocument_PrintPage);
}

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
    {
        Graphics g = e.Graphics; //获得绘图对象
        float linesPerPage = 0; //页面的行号
        float yPosition = 0;   //绘制字符串的纵向位置
        int count = 0; //行计数器
        float leftMargin = e.MarginBounds.Left; //左边距
        float topMargin = e.MarginBounds.Top; //上边距
        string line = null; ///行字符串
        Font printFont = this.textBox1.Font; //当前的打印字体
        SolidBrush myBrush = new SolidBrush(Color.Black);//刷子
        linesPerPage = e.MarginBounds.Height / printFont.GetHeight(g);//每页可打印的行数
        //逐行的循环打印一页
        while (count < linesPerPage && ((line = lineReader.ReadLine()) != null))
        {
            yPosition = topMargin + (count * printFont.GetHeight(g));
            g.DrawString(line, printFont, myBrush, leftMargin, yPosition, new StringFormat());
            count++;
        }
        // 注意:使用本段代码前,要在该窗体的类中定义lineReader对象:
        //       StringReader lineReader = null;
        //如果本页打印完成而line不为空,说明还有没完成的页面,这将触发下一次的打印事件。在下一次的打印中lineReader会
        //自动读取上次没有打印完的内容,因为lineReader是这个打印方法外的类的成员,它可以记录当前读取的位置
        if (line != null)
            e.HasMorePages = true;
        else
        {
            e.HasMorePages = false;
            // 重新初始化lineReader对象,不然使用打印预览中的打印按钮打印出来是空白页
            lineReader = new StringReader(textBox1.Text); // textBox是你要打印的文本框的内容
        }
    }

    //打印设置
    private void FileMenuItem_PrintSet_Click(object sender, EventArgs e)
    {
         PrintDialog printDialog = new PrintDialog();
         printDialog.Document = printDocument;
         printDialog.ShowDialog();
    }

    //页面设置
    private void FileMenuItem_PageSet_Click(object sender, EventArgs e)
    {
        PageSetupDialog pageSetupDialog = new PageSetupDialog();
        pageSetupDialog.Document = printDocument;
        pageSetupDialog.ShowDialog();
    }

    //打印预览
    private void FileMenuItem_PrintView_Click(object sender, EventArgs e)
    {
        PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
        printPreviewDialog.Document = printDocument;
        lineReader = new StringReader(textBox1.Text);
        try
        {
            printPreviewDialog.ShowDialog();
        }
        catch (Exception excep)
        {
            MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    //打印
    private void FileMenuItem_Click(object sender, EventArgs e)
    {
        PrintDialog printDialog = new PrintDialog();
        printDialog.Document = printDocument;
        lineReader = new StringReader(textBox1.Text);
        if (printDialog.ShowDialog() == DialogResult.OK)
        {
            try
            {
                printDocument.Print();
            }
            catch (Exception excep)
            {
                MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
                printDocument.PrintController.OnEndPrint(printDocument, new PrintEventArgs());
            }
        }
    }

    private void btnDocmentPrint_Click(object sender, EventArgs e)
    {
        string strBinPath = GetFilePath();
        Process pr = new Process();
        pr.StartInfo.FileName = "PACK生产进度查询.xlt.";//文件全称-包括文件后缀
        pr.StartInfo.CreateNoWindow = true;
        pr.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        pr.StartInfo.Verb = "Print";
        pr.Start();
    }


    private static string GetFilePath()
    {
        string filepath = AppDomain.CurrentDomain.BaseDirectory;
        int binPos = filepath.IndexOf("bin");
        string binPath = filepath.Remove(binPos);
        return binPath;
    } 


}
原文地址:https://www.cnblogs.com/VictorBlog/p/5832958.html