打印备份

来源:互联网 发布:男生发型 知乎 编辑:程序博客网 时间:2024/05/01 03:21

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

namespace GoldPrinter
{
 /// <summary>
 /// Form1 的摘要说明。
 /// </summary>
 public class frmPrint : System.Windows.Forms.Form
 {

  private System.Windows.Forms.MainMenu mainMenu1;
  private System.Windows.Forms.MenuItem menuFile;
  private System.Windows.Forms.MenuItem menuFilePageSetup;
  private System.Windows.Forms.MenuItem menuFilePrintPreview;
  private System.Windows.Forms.MenuItem menuFilePrint;

        private System.Windows.Forms.DataGrid dataGrid1;
        private IContainer components;

  public frmPrint()
  {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();

   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
  }

  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region Windows 窗体设计器生成的代码
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {
            this.components = new System.ComponentModel.Container();
            this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components);
            this.menuFile = new System.Windows.Forms.MenuItem();
            this.menuFilePageSetup = new System.Windows.Forms.MenuItem();
            this.menuFilePrintPreview = new System.Windows.Forms.MenuItem();
            this.menuFilePrint = new System.Windows.Forms.MenuItem();
            this.dataGrid1 = new System.Windows.Forms.DataGrid();
            ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
            this.SuspendLayout();
            //
            // mainMenu1
            //
            this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.menuFile});
            //
            // menuFile
            //
            this.menuFile.Index = 0;
            this.menuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.menuFilePageSetup,
            this.menuFilePrintPreview,
            this.menuFilePrint});
            this.menuFile.Text = "&File";
            //
            // menuFilePageSetup
            //
            this.menuFilePageSetup.Index = 0;
            this.menuFilePageSetup.Text = "Page Set&up";
            this.menuFilePageSetup.Click += new System.EventHandler(this.menuFilePageSetup_Click);
            //
            // menuFilePrintPreview
            //
            this.menuFilePrintPreview.Index = 1;
            this.menuFilePrintPreview.Text = "Print Pre&view";
            this.menuFilePrintPreview.Click += new System.EventHandler(this.menuFilePrintPreview_Click);
            //
            // menuFilePrint
            //
            this.menuFilePrint.Index = 2;
            this.menuFilePrint.Text = "&Print";
            this.menuFilePrint.Click += new System.EventHandler(this.menuFilePrint_Click);
            //
            // dataGrid1
            //
            this.dataGrid1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.dataGrid1.DataMember = "";
            this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
            this.dataGrid1.Location = new System.Drawing.Point(2, 14);
            this.dataGrid1.Name = "dataGrid1";
            this.dataGrid1.Size = new System.Drawing.Size(518, 357);
            this.dataGrid1.TabIndex = 0;
            //
            // frmPrint
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
            this.BackColor = System.Drawing.SystemColors.Window;
            this.ClientSize = new System.Drawing.Size(520, 374);
            this.Controls.Add(this.dataGrid1);
            this.Menu = this.mainMenu1;
            this.Name = "frmPrint";
            this.Text = "SimplePrintingExample";
            this.Load += new System.EventHandler(this.frmPrint_Load);
            ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
            this.ResumeLayout(false);

  }
  #endregion

  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main()
  {
   Application.Run(new frmPrint());
  }

  private void frmPrint_Load(object sender, System.EventArgs e)
  {
   this.dataGrid1.DataSource = this.GetDataSource();
  }

 

  private void menuFilePageSetup_Click(object sender, System.EventArgs e)
  {
  }
  private void menuFilePrint_Click(object sender, System.EventArgs e)
  {
   this.Print(true);
  }

  private void menuFilePrintPreview_Click(object sender, System.EventArgs e)
  {
   this.Print(false);
  }


  private void Print(bool print)
  {
   MisPrinter webmis = new MisPrinter(); //打印组件

   //webmis.BackColor = Color.FloralWhite; //背景色
   //webmis.IsPrinterMargins = true;  //试试看,去掉注释后就明白了
   //webmis.RowsPerPage = 20;    //可以指定每页打印的行数,默认自适应
   //webmis.GridBorder = GoldPrinter.GridBorderFlag.SingleBold;

   Title title = new Title();
   title.Text = "WebMIS.Net快速开发工具/nWWW.AlinkSoft.COM";
   webmis.Title = title;         //等效于webmis.Title = "WebMIS.Net快速开发工具/nWWW.AlinkSoft.COM";
                
   webmis.Caption = "  ——之打印源码,欢迎下载";  //但对象方式(见webmis.Title)更具特性,因为还可以定义字体等

                //可以是以'|'分隔的字符串或一维数组或具有更多特性的Top/Bottom对象
   webmis.Top = "作者:周方勇|2004-08-16|版本:V1.0";  //等价于 webmis.Top = new string[]{"作者:周方勇","2004-08-16","版本:V1.0"};
                //webmis.Top = new Top();  此种表示见webmis.Bottom
   
   
   Header header = new Header(3,4);     //行列数基本不受限制,但超过一页失去意义,因为以Body为主,以其它为辅
   header.IsDrawAllPage = true;      //可以指定每页是否重复打印
   header.SetText(0,0,"Header00");      //实际上可以设置header.DataSource
   header.SetText(0,1,"Header01");      //DataSource可以是字符串、一维数组、二维数组、DataTable、WinDataGrid、WebDataGrid、
   header.SetText(0,2,"Header02");      //MSHFlexGrid、HtmlTable等等二维形式
   header.SetText(0,3,"Header03");      //

   header.SetText(1,0,"Header10");      //同仁们还可以根据实际应用对GridBase的DataSource进行扩展
   header.SetText(1,1,"Header11");      
   header.SetText(1,2,"Header12");      
   header.SetText(1,3,"Header13");

   header.SetText(2,0,"Header20");
   header.SetText(2,1,"Header21");
   header.SetText(2,2,"Header22");
   header.SetText(2,3,"Header23");
   webmis.Header = header;         

   MultiHeader multiHeader = new MultiHeader(2,6);

   multiHeader.SetMergeTextOnColSel(0,0,1,"    项目/nNo.     ."); 
   multiHeader.IsDrawDiagonalLine = true;        
   multiHeader.DiagonalLineRows = 2; //试试其它的数如3  又如1.5F

                    
   multiHeader.SetMergeTextOnColSel(1,0,1,"产品/n名称"); //等价于 //multiHeader.SetText(1,1,"产品/n名称");
                    //multiHeader.SetText(0,1,"产品/n名称");   
   multiHeader.SetText(0,2,"规格");
                    //multiHeader.SetText(0,3,"订量信息");
   multiHeader.SetMergeTextOnRowSel(0,3,5,"订量信息");  //等价于 //multiHeader.SetText(0,4,"订量信息");
                    //multiHeader.SetText(0,5,"订量信息"); 

   multiHeader.SetText(1,2,"规格");
   multiHeader.SetText(1,3,"单价");
   multiHeader.SetText(1,4,"数量");
   multiHeader.SetText(1,5,"金额");
   webmis.MultiHeader = multiHeader;

   Body body = new Body();
   body.ColsAlignString = "LLCRRR";      //由左中右第一个字母组成,对应于每列的对对齐方式
   
   //只要是二维数组,都可以,因此DataGrid、MSHFlexGrid、DBGrid、DataTable、HtmlTable等等都OK
   //这里用DataGrid作一个例子。不过,你自己可以写一个函数,把没有支持的二维控件转换成数组就OK了
   //body.DataSource = this.GetDataSource();     
   //body.DataSource = (DataTable)(this.dataGrid1.DataSource); //或者
   //body.DataSource = this.dataGrid1.DataSource;    //或者
   body.DataSource = this.dataGrid1;       //或者

   
   int mcols = 6;
   #region 这是数组的例子,把body.DataSource = (DataTable)(this.dataGrid1.DataSource);注释掉,去掉下面的注释看看
   /*
   int mrows = 50;//111;
   string[,] arrstrGrid = new string[mrows,mcols];
   for(int i=0 ;i< mrows ; i++)
   {
    for(int j=0 ;j< mcols-1 ; j++)
    {
     arrstrGrid[i,j] = (i + 1).ToString() + "行" + (j + 1).ToString() + "列";
    }   
    arrstrGrid[i,0] = (i + 1).ToString();
    arrstrGrid[i,mcols-1] = (i + 1).ToString();
   }

   body.DataSource = arrstrGrid;  //body.GridText = arrstrGrid;
   */
   #endregion

   webmis.Body = body;
   webmis.IsSubTotalPerPage = true;    //这是打印本页小计
   webmis.SubTotalCol = (mcols-2).ToString() + ";" + (mcols-1).ToString();  //用分号分隔的要求小计的列    
   
   Footer footer = new Footer(2,5);
   footer.SetText(0,0,"Footer00");
   footer.SetText(0,1,"Footer01");
   footer.SetText(0,2,"Footer02");
   footer.SetText(0,3,"Footer03");
   footer.SetText(0,4,"Footer04");

   footer.SetText(1,0,"Footer10");
   footer.SetText(1,1,"Footer11");
   footer.SetText(1,2,"Footer12");
   footer.SetText(1,3,"Footer13");
   footer.SetText(1,4,"Footer14");
   footer.IsDrawAllPage = true;
   webmis.Footer = footer;
   
   GoldPrinter.Bottom bottom = new Bottom();  //Top/Bottom的另一种方式
   bottom.Text =  "打印程序开源版||打印日期:" + System.DateTime.Now.ToLongDateString();
   webmis.Bottom = bottom;


   //将注释去掉试试看
   Sewing sewing = new Sewing(20,SewingDirectionFlag.Left);
   webmis.Sewing = sewing;
   webmis.IsSewingLine = true;   //打印装订线  


   webmis.IsSubTotalPerPage = true; //每页加小计
  

   if (print)
   {
    webmis.Print();
   }
   else
   {
    webmis.Preview();
   }

   webmis.Dispose();
   webmis = null;
  }


  private DataTable GetDataSource()
  {
   DataTable dt=new DataTable();

   int rows = 100;
   int cols = 6;

   //增加行
   for (int intRowIndex=0;intRowIndex<rows;intRowIndex++)
   {
    dt.Rows.Add(dt.NewRow());    
   }
   //增加新列
   for (int intColIndex=0;intColIndex<cols;intColIndex++)
   {
    //dt.Columns.Add(intColIndex.ToString());
    dt.Columns.Add();
    //填写默认值为空串(.NET  TextColumn默认为"空")
    dt.Columns[intColIndex].DefaultValue="";
   }

   int i,j;
   for(i=0 ;i< rows ; i++)
   {
    for(j=0 ;j< cols-3 ; j++)
    {
     dt.Rows[i][j] = (i + 1).ToString() + "行" + (j + 1).ToString() + "列";     
     dt.Rows[i][cols-3] = (j + 1).ToString() + "." + (i + 1).ToString();
     dt.Rows[i][cols-2] = (i + 1).ToString();
    }       
    dt.Rows[i][cols-1] = (double.Parse(dt.Rows[i][cols-2].ToString()) * double.Parse(dt.Rows[i][cols-3].ToString())).ToString();
   } 
 
   return dt;
  }

  
 }//End Class
}//End Namespace