打印备份
来源:互联网 发布:男生发型 知乎 编辑:程序博客网 时间: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