www.pudn.com > PrinterPageSetting.rar > Form1.cs
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace GoldPrinter
{
///
/// 实现显示页面设置\打印机设置\打印预览对话框及分页的步骤
/// 作 者:周方勇
/// Email:flygoldfish@sina.com
///
/// //MIS金质打印王,各种报表、网格如DataGrid打印、DataTable、HtmlTable等二维形式全搞定,源码免费下载
/// 讨论:http://community.csdn.net/Expert/topic/3278/3278050.xml?temp=.5012934
/// 下载:http://www.alinksoft.com
///
public class Form1 : System.Windows.Forms.Form
{
#region Windows 窗体设计器生成的代码
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;
internal System.Windows.Forms.TextBox TextBox1;
///
/// 必需的设计器变量。
///
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
///
/// 清理所有正在使用的资源。
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
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.TextBox1 = new System.Windows.Forms.TextBox();
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);
//
// TextBox1
//
this.TextBox1.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.TextBox1.Location = new System.Drawing.Point(8, 8);
this.TextBox1.Multiline = true;
this.TextBox1.Name = "TextBox1";
this.TextBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.TextBox1.Size = new System.Drawing.Size(872, 544);
this.TextBox1.TabIndex = 1;
this.TextBox1.Text = @"//*****实现显示页面设置\打印设置\打印预览对话框及分页的步骤*****
//第一步:申明并实例化,当然实例化对象可以放在构造函数中
private GoldPrinter.PrinterPageSetting printerPageSetting = new GoldPrinter.PrinterPageSetting();
//第二步:写下面一个过程即实现打印的具体过程,实现PrintPage委托
private void PrintDocument_PrintPage_Handler(object o,System.Drawing.Printing.PrintPageEventArgs e)
{
System.Drawing.Graphics g = e.Graphics;
if (Draw(g))
{
e.HasMorePages = true; //要分页打印
}
else
{
e.HasMorePages = false; //打印结束
}
}
//第三步:打印委托,当然也可以放在构造函数中
private void Form1_Load(object sender, System.EventArgs e)
{
//this.printerPageSetting.PrintPage += new GoldPrinter.PrintPageDelegate(PrintDocument_PrintPage_Handler);
//如果你不知上一句是什么意思,就用这一句吧,
//意思就是告诉printerPageSetting打印的具体实现过程是PrintDocument_PrintPage_Handler
this.printerPageSetting.PrintPageValue = new GoldPrinter.PrintPageDelegate(PrintDocument_PrintPage_Handler);
}
//第四步:显示页面设置\打印机设置\打印预览对话框
private void menuFilePageSetup_Click(object sender, System.EventArgs e)
{
this.printerPageSetting.ShowPageSetupDialog(); //显示页面设置对话框
}
private void menuFilePrintPreview_Click(object sender, System.EventArgs e)
{
this.printerPageSetting.ShowPrintPreviewDialog(); //显示打印预览对话框
}
private void menuFilePrint_Click(object sender, System.EventArgs e)
{
this.printerPageSetting.ShowPrintSetupDialog(); //显示打印预览对话框
}";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(888, 529);
this.Controls.Add(this.TextBox1);
this.Menu = this.mainMenu1;
this.Name = "Form1";
this.Text = "页面设置\\打印设置\\打印预览对话框(C#版)";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
#endregion
//*****实现显示页面设置\打印机设置\打印预览对话框及分页的步骤*****
//第一步:申明并实例化,当然实例化对象可以放在构造函数中
private GoldPrinter.PrinterPageSetting printerPageSetting = new GoldPrinter.PrinterPageSetting();
//第二步:写下面一个过程即实现打印的具体过程,实现PrintPage委托
private void PrintDocument_PrintPage_Handler(object o,System.Drawing.Printing.PrintPageEventArgs e)
{
System.Drawing.Graphics g = e.Graphics;
if (Draw(g))
{
e.HasMorePages = true; //要分页打印
}
else
{
e.HasMorePages = false; //打印结束
}
}
//第三步:打印委托,当然也可以放在构造函数中
private void Form1_Load(object sender, System.EventArgs e)
{
//this.printerPageSetting.PrintPage += new GoldPrinter.PrintPageDelegate(PrintDocument_PrintPage_Handler);
//如果你不知上一句是什么意思,就用这一句吧,
//意思就是告诉printerPageSetting打印的具体实现过程是PrintDocument_PrintPage_Handler
this.printerPageSetting.PrintPageValue = new GoldPrinter.PrintPageDelegate(PrintDocument_PrintPage_Handler);
}
//第四步:显示页面设置\打印机设置\打印预览对话框
private void menuFilePageSetup_Click(object sender, System.EventArgs e)
{
this.printerPageSetting.ShowPageSetupDialog(); //显示页面设置对话框
}
private void menuFilePrintPreview_Click(object sender, System.EventArgs e)
{
this.printerPageSetting.ShowPrintPreviewDialog(); //显示打印预览对话框
}
private void menuFilePrint_Click(object sender, System.EventArgs e)
{
this.printerPageSetting.ShowPrintSetupDialog(); //显示打印预览对话框
}
//其它...
private static int intCurrentCharIndex;
private bool Draw(System.Drawing.Graphics g)
{
float width,height;
width = this.printerPageSetting.PrintDocument.DefaultPageSettings.PaperSize.Width - this.printerPageSetting.PrintDocument.DefaultPageSettings.Margins.Left - this.printerPageSetting.PrintDocument.DefaultPageSettings.Margins.Right;
height = this.printerPageSetting.PrintDocument.DefaultPageSettings.PaperSize.Height -this.printerPageSetting.PrintDocument.DefaultPageSettings.Margins.Top - this.printerPageSetting.PrintDocument.DefaultPageSettings.Margins.Bottom;
//横向打印,宽与高交换
if (this.printerPageSetting.PrintDocument.DefaultPageSettings.Landscape)
{
Swap(ref width,ref height);
}
RectangleF recPrintArea = new RectangleF(this.printerPageSetting.PrintDocument.DefaultPageSettings.Margins.Left,this.printerPageSetting.PrintDocument.DefaultPageSettings.Margins.Top,width,height);
DrawText drawText = new DrawText(this.TextBox1.Text);
drawText.Graphics = g;
drawText.RectangleF = recPrintArea;
drawText.StartChar = intCurrentCharIndex;
drawText.Draw();
intCurrentCharIndex += drawText.CharsFitted;
if (intCurrentCharIndex < this.TextBox1.Text.Length)
{
return true;
}
else
{
intCurrentCharIndex = 0;
return false;
}
}
//两个数的值互换
private void Swap(ref float i,ref float j)
{
float tmp = i;
i = j;
j = tmp;
}
}//End Class
}//End Namespace