现在的位置: 首页 > 综合 > 正文

WinForm中的打印制作(无textBox)

2013年10月13日 ⁄ 综合 ⁄ 共 9990字 ⁄ 字号 评论关闭

最近做了一个winForm的打印功能。由于初次制作,对这个也不太了解。所以在网上找了很多资料。最后整理出处如下代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;

namespace WindowsApplication1
{
    public partial class daochu : Form
    {
        public daochu()
        {
            InitializeComponent();
        }
        PrintDocument printDocument;
        private void daochu_Load(object sender, EventArgs e)
        {
            PrintDocuments();

        }

        private void PrintDocuments()//封装事件
        {
            printDocument = new PrintDocument();
            printDocument.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);//打印页面需指定相应的PrintDocument_PrintPrintPage事件委托 

        }

        int iWidth=800;
        int  iHeight = 600;
        int left=150;
        int right=150;
        int top=100;
        int bottom = 100;
        Graphics g;
        Brush b;
        Font titleFont;
        Font fntTxt;
        System.Drawing.Printing.PrintPageEventArgs x;
        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            PrintStyle(e);
        }

        private void PrintStyle(System.Drawing.Printing.PrintPageEventArgs e)//打印样式的方法封装
        {
            this.printDocument1.DefaultPageSettings.PaperSize = new
            System.Drawing.Printing.PaperSize("NewPrint", iWidth, iHeight); //设置打印纸的大小
            titleFont = new Font("宋体", 18, FontStyle.Bold);//标题字体           
            fntTxt = new Font("宋体", 16, FontStyle.Regular);//正文文字
            Margins margins = new Margins(left, right, top, bottom);//设置上下左右边距
            printDocument.DefaultPageSettings.Margins = margins;
            x = e;
            float leftMargin = e.MarginBounds.Left;//左边距
            float topMargin = e.MarginBounds.Top;//上边距
            Brush brush = new SolidBrush(Color.Black);//画刷         
            //Pen pen = new Pen(Color.Black);           //线条颜色
            g = e.Graphics;
            b = new SolidBrush(Color.Black);
            Point po = new Point(10, 10);
            try
            {
                e.Graphics.DrawString(GetPrintSW().ToString(), fntTxt, brush, po);   //DrawString方式进行打印。
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, "打印出错!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        ///GetPrintSw方法用来构造打印文本,内部StringBuilder.AppendLine在Drawstring时单独占有一行。

     
         // public StringBuilder GetPrintSW(string name, string IDcard, int Num) //外部传入值时用

        public StringBuilder GetPrintSW() //直接在内部定义值
        {
            StringBuilder sb = new StringBuilder();
            string AdrName = txtNames.Text.Trim();
            if (AdrName == "")
            {
                AdrName = "中华人民共和国";
            }
            string title = "大中华" + AdrName + "动迁配套商品房";

            string titles = "顺序号抽签资格确认单";

            string IDcard = "622825198910223315";    //身份证      

            string name = "";
       
            string names="";
            if (name.Length == 2)
            {
                names= "\0\0"+name+"\0\0";
            }
            else if (name.Length == 3)
            {
                names ="\0"+ name+"\0" ;
            }
            else if (name.Length == 4)
            {
                names = name ;
            }
            else
            {
                names = "\0\0\0\0\0\0\0";
            }
            string  Num="25";              //号码

            string item1 = "\0\0\0\0经本单位审核确认,抽签人\0" + names + "\0有资格按《中华人民共";

            string item2 = "和国国务院动迁配套商品房抽签公告》的规定参加顺序号抽签活动。";

            string item3 = "请公证处按抽签公告的规定,为其办理顺序号电脑抽签公证。";

            string item4 ="备注:\0证件号码为:\0" + IDcard + "\0抽签顺序号为:\0" + Num;

            string item5 = " \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + AdrName + "民委员会";
            //string item6 = "(抽签人暂存并交相关单位签约联)";

            /*横向打印文本控制,后面的x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2控制左右,20控制上下
            g.DrawString("\r\n\r\r\n\r\n\r\n" + title , titleFont, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 20));//标题

            g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\n" + item1 + " \r\n\r\n\r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 4, 50));
             *
            g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n" + item2 + " \r\n\r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 4, 120));

            g.DrawString("\r\n\r\r\n\r\n\r\n\r\n" + item3 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 4, 190));
             *
            g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n" + item4 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 220));
             *
            g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\n \0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0日期:" + DateTime.Now.ToShortDateString(), fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 250));
            g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n" + item5 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 3, 300));
             */

            for (int j = 1; j <= 2; j++)
            {
                int m = 0;
                if (j == 1)
                {
                    m = 0;
                }
                else
                {
                    m = 580;
                }        
                g.DrawString("\r\n\r\r\n\r\n\r\r" + title, titleFont, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 10+m));//标题1
                g.DrawString("\r\n\r\r\n\r\n\r\r\r\0\0\0\0\0\0\0\0\0\0\0\0" + titles, titleFont, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 3, 45 + m));//标题2
                g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\0" + item1 + " \r\n\r\n\r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 6, 50 + m));
                g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\0" + item2 + " \r\n\r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 6, 120 + m));
                g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\r\0" + item3 + " \r\n\r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 6, 170 + m));
                g.DrawString("\r\n\r\r\n\r\n\r\n\r\0" + item4 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 6, 240 + m));
                g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\0\0" + item5 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 4, 290 + m));
                g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0日期:" + DateTime.Now.ToShortDateString(), fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 300 + m));
               // g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\r\n\r\0" + item6 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 6, 310 + m));

            }

            /*以下方式属于第二种打印方式
            sb.AppendLine("\r\n\r");//“\n”为换行符;“\r”为回车符
            sb.AppendLine("\r\n\r");
            sb.AppendLine("\r\n\r");
            sb.AppendLine("\r\n");
            //标题,主要是为了控制字体的样式方便
            g.DrawString("\r\n\r\r\n\r\n\r\n" + title, titleFont, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 2, 15));
            //sb.AppendLine("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + title + " \r\n\r");
            sb.AppendLine("\0\0\0\0\0" + item1 + "\r\n\r");
            sb.AppendLine("\0\0\0\0\0" + item2 + "\r\n\r");
            sb.AppendLine("\0\0\0\0\0" + item3 + "\r\n");
            sb.AppendLine("\r\n\r");
           // sb.AppendLine("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + item4 + "\r\n\r");
            g.DrawString("\r\n\r\r\n\r\n\r\n\r\n\r\n\0\0\0\0\0\0" + item4 + " \r\n\r", fntTxt, b, new PointF((x.PageBounds.Width - g.MeasureString(title, titleFont).Width) / 4, 240));
            sb.AppendLine("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0日期:" + DateTime.Now.ToShortDateString());
            sb.AppendLine("\r");
            sb.AppendLine("\0\0\0\0\0\0\0\0\0\0" + item5);
           // sb.AppendLine("-----------------------------------------");      
   */
            return sb;
        }
       
        private void btntxt_Click(object sender, EventArgs e)//打印
        {
            Printing();            
        }

        private void Printing()//打印的方法
        {
            PrintDialog printDialog = new PrintDialog();
            printDialog.Document = printDocument;
            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 show_Click(object sender, EventArgs e)//打印预览
        {
            PrintPreview();
        }

        private void PrintPreview()//打印预览的方法
        {
            PageSetupDialog psd = new PageSetupDialog();
            psd.Document = printDocument;
            PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
            printPreviewDialog.Document = printDocument;

            /*横向打印预览设置  ps:默认为纵向          
            printDocument.PrinterSettings.PrintToFile = false;
            printDocument.DefaultPageSettings.Landscape = true;
            printDocument.PrinterSettings.DefaultPageSettings.Landscape = true;
            printDocument.DefaultPageSettings.PrinterSettings.DefaultPageSettings.Landscape = true;
            PrintDialog pDialog = new PrintDialog();
            pDialog.Document = printDocument;
            pDialog.PrinterSettings.DefaultPageSettings.Landscape = true;
            pDialog.PrinterSettings.PrintToFile = false;
            pDialog.Document.DefaultPageSettings.Landscape = true;
           */

            try
            {
                printPreviewDialog.ShowDialog();
            }
            catch (Exception excep)
            {
                MessageBox.Show(excep.Message, "预览出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}

因为时间原因,很多代码也不知道具体的意思。但是总上是实现了这个打印功能。今天在此贴出代码,希望路过的高手指点代码的不足。在此小弟先谢谢了~~~

抱歉!评论已关闭.