C# 实现自己画内容并打印


1. 首先在界面中拉入三个控件,右边为panel

C# 实现自己画内容并打印

2. 界面初始化添加自打印事件,PrintEveryPage函数中添加打印内容

 public FrmPrinter()
        {
            InitializeComponent();
            this.printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.PrintEveryPage);
        }


 private void PrintEveryPage(object sender, PrintPageEventArgs e)
        {
  int tmpCount = 0;
            int pageHeight = paperSize.Height;
            int pageWidth = paperSize.Width;
            int textStartX = pageMergin.Left;
            int textStartY =pageMergin.Top;
            int txtWidth = pageWidth - pageMergin.Left - pageMergin.Right;
            e.HasMorePages = false;
            Graphics gh = e.Graphics;//获取绘图对象  

    string myStr;
            Pen myPen = new Pen(Color.Black);
            gh.DrawLine(myPen, pageMergin.Left / 2, 40, pageWidth - pageMergin.Right, 40);
            RectangleF rec = new RectangleF(0, 0, pageWidth, pageMergin.Top);
            Font titleFont = new System.Drawing.Font("宋体", (float)15.0, FontStyle.Bold);
            Brush titleBrush = new SolidBrush(Color.Black);
            myStr = "自己画的字符串";
            StringFormat fmt = new StringFormat();
            fmt.LineAlignment = StringAlignment.Center;
            fmt.Alignment = StringAlignment.Center;
            gh.DrawString(myStr, titleFont, titleBrush, rec, fmt);

        }


3.打开预览


 private void bt_scanReport_Click(object sender, EventArgs e)
        {
            PrintPreviewDialog printPreviewDialog1;
            printPreviewDialog1 = new PrintPreviewDialog();
            printPreviewDialog1.TopLevel = false;
            printPreviewDialog1.AllowTransparency = true;
            printPreviewDialog1.Document = this.printDocument1;


            panel1.Controls.Add(printPreviewDialog1);
            Form f = (Form)printPreviewDialog1;
            f.WindowState = FormWindowState.Maximized;
            f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            printPreviewDialog1.Show();
        }


4. 打印函数

   private void bt_printReport_Click(object sender, EventArgs e)
        {
            printDialog1.AllowCurrentPage = true;
            printDialog1.AllowSomePages = true;
            printDialog1.AllowPrintToFile = true;
            if (this.printDialog1.ShowDialog() == DialogResult.OK)
            {
                this.printDocument1.Print();
            }
        }