Print Events
/*
GDI+ Programming in C# and VB .NET
by Nick Symmonds
Publisher: Apress
ISBN: 159059035X
*/
using System;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace PrintEvents_c
{
public class PrintEvents : System.Windows.Forms.Form
{
private Font PrintFont;
private StreamReader PrintStream;
private System.Windows.Forms.Button cmdPrint;
private System.Windows.Forms.Label lblEvents;
private System.ComponentModel.Container components = null;
public PrintEvents()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
PrintFont.Dispose();
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.cmdPrint = new System.Windows.Forms.Button();
this.lblEvents = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// cmdPrint
//
this.cmdPrint.Location = new System.Drawing.Point(104, 280);
this.cmdPrint.Name = "cmdPrint";
this.cmdPrint.Size = new System.Drawing.Size(80, 24);
this.cmdPrint.TabIndex = 0;
this.cmdPrint.Text = "Print";
this.cmdPrint.Click += new System.EventHandler(this.cmdPrint_Click);
//
// lblEvents
//
this.lblEvents.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.lblEvents.Location = new System.Drawing.Point(24, 16);
this.lblEvents.Name = "lblEvents";
this.lblEvents.Size = new System.Drawing.Size(248, 248);
this.lblEvents.TabIndex = 1;
//
// PrintEvents
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 323);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.lblEvents,
this.cmdPrint});
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "PrintEvents";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "PrintEvents";
this.Load += new System.EventHandler(this.PrintEvents_Load);
this.ResumeLayout(false);
}
#endregion
[STAThread]
static void Main()
{
Application.Run(new PrintEvents());
}
private void PrintEvents_Load(object sender, System.EventArgs e)
{
}
// Print the file.
public void Print_It()
{
try
{
//Get the file to print
PrintStream = new StreamReader ("Test.txt");
try
{
PrintFont = new Font("Arial", 10);
PrintDocument pd = new PrintDocument();
//Assign my overloaded version of the standard print controller
//Send it a reference to the label so it can tell us what is
//going on.
pd.PrintController = new MyPrintController(ref lblEvents);
//Install event handlers
pd.BeginPrint += new PrintEventHandler(this.pd_StartPrint);
pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
pd.EndPrint += new PrintEventHandler(this.pd_EndPrint);
// Print the document.
pd.Print();
}
finally
{
PrintStream.Close();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void pd_StartPrint(object sender, PrintEventArgs ev)
{
lblEvents.Text += "PrintDocument: BeginPrint\n";
}
private void pd_EndPrint(object sender, PrintEventArgs ev)
{
lblEvents.Text += "PrintDocument: EndPrinting\n";
}
// The PrintPage event is raised for each page to be printed.
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
float linesPerPage = 0;
float yPos = 0;
int count = 0;
float leftMargin = ev.MarginBounds.Left;
float topMargin = ev.MarginBounds.Top;
String line=null;
lblEvents.Text += "PrintDocument: PagePrint\n";
// Calculate the number of lines per page.
linesPerPage = ev.MarginBounds.Height / PrintFont.GetHeight(ev.Graphics);
// Iterate over the file, printing each line. Use a basic StringFormat
while (count++ < linesPerPage && ((line=PrintStream.ReadLine()) != null))
{
//Calculate vertical position of the line.
yPos = topMargin + (count * PrintFont.GetHeight(ev.Graphics));
//This is the graphics object obtained by the PrintController
//OnStartPage method. We are drawing to the printer!!
ev.Graphics.DrawString (line, PrintFont, Brushes.Black,
leftMargin, yPos, new StringFormat());
}
// If more lines exist, print another page.
if (line != null)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}
private void cmdPrint_Click(object sender, System.EventArgs e)
{
Print_It();
}
}
public class MyPrintController : StandardPrintController
{
private Label lblEvents;
public MyPrintController(ref Label lbl): base()
{
lblEvents = lbl;
}
public override void OnStartPrint(PrintDocument doc, PrintEventArgs e)
{
lblEvents.Text += " PrintController: OnStartPrint\n";
base.OnStartPrint(doc, e);
}
public override Graphics OnStartPage(PrintDocument doc, PrintPageEventArgs e)
{
lblEvents.Text += " PrintController: OnStartPage\n";
return( base.OnStartPage(doc, e) );
}
public override void OnEndPage(PrintDocument doc, PrintPageEventArgs e)
{
lblEvents.Text += " PrintController: OnEndPage\n";
base.OnEndPage(doc, e);
}
public override void OnEndPrint(PrintDocument doc, PrintEventArgs e)
{
lblEvents.Text += " PrintController: OnEndPrint\n";
base.OnEndPrint(doc, e);
}
}
}
Related examples in the same category