/*
GDI+ Programming in C# and VB .NET
by Nick Symmonds
Publisher: Apress
ISBN: 159059035X
*/
using System;
using System.Drawing;
using System.IO;
using System.Drawing.Printing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace BeginPrint_c
{
///
/// Summary description for BeginPrint.
///
public class BeginPrint1 : System.Windows.Forms.Form
{
#region Class Local Storage
PrintDocument Pd;
Font Pf;
TextReader file;
int Pages = 0;
#endregion
private System.Windows.Forms.ComboBox cmbPrinters;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button cmdStartPrint;
private System.Windows.Forms.ListBox lstPaper;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.ListBox lstRes;
private System.ComponentModel.Container components = null;
public BeginPrint1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.cmbPrinters = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.cmdStartPrint = new System.Windows.Forms.Button();
this.lstPaper = new System.Windows.Forms.ListBox();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.lstRes = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
// cmbPrinters
//
this.cmbPrinters.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbPrinters.Location = new System.Drawing.Point(16, 192);
this.cmbPrinters.Name = "cmbPrinters";
this.cmbPrinters.Size = new System.Drawing.Size(256, 21);
this.cmbPrinters.TabIndex = 0;
//
// label1
//
this.label1.Location = new System.Drawing.Point(16, 176);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(256, 16);
this.label1.TabIndex = 1;
this.label1.Text = "Installed Printers";
//
// cmdStartPrint
//
this.cmdStartPrint.Location = new System.Drawing.Point(88, 224);
this.cmdStartPrint.Name = "cmdStartPrint";
this.cmdStartPrint.Size = new System.Drawing.Size(88, 32);
this.cmdStartPrint.TabIndex = 2;
this.cmdStartPrint.Text = "Start Print";
this.cmdStartPrint.Click += new System.EventHandler(this.cmdStartPrint_Click);
//
// lstPaper
//
this.lstPaper.Location = new System.Drawing.Point(16, 24);
this.lstPaper.Name = "lstPaper";
this.lstPaper.Size = new System.Drawing.Size(256, 56);
this.lstPaper.TabIndex = 3;
//
// label2
//
this.label2.Location = new System.Drawing.Point(18, 8);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(256, 16);
this.label2.TabIndex = 4;
this.label2.Text = "Paper Size";
//
// label3
//
this.label3.Location = new System.Drawing.Point(16, 88);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(256, 16);
this.label3.TabIndex = 6;
this.label3.Text = "Printer Resolution";
//
// lstRes
//
this.lstRes.Location = new System.Drawing.Point(16, 104);
this.lstRes.Name = "lstRes";
this.lstRes.Size = new System.Drawing.Size(256, 56);
this.lstRes.TabIndex = 5;
//
// BeginPrint
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.label3,
this.lstRes,
this.label2,
this.lstPaper,
this.cmdStartPrint,
this.label1,
this.cmbPrinters});
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "BeginPrint";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "BeginPrint";
this.Load += new System.EventHandler(this.BeginPrint_Load);
this.ResumeLayout(false);
}
#endregion
[STAThread]
static void Main()
{
Application.Run(new BeginPrint1());
}
private void BeginPrint_Load(object sender, System.EventArgs e)
{
Init();
}
private void Init()
{
foreach(String p in PrinterSettings.InstalledPrinters)
cmbPrinters.Items.Add(p);
if ( cmbPrinters.Items.Count > 0 )
cmbPrinters.SelectedIndex = 0;
//Add a few paper sizes to the list box
lstPaper.Items.Add(PaperKind.A4.ToString());
lstPaper.Items.Add(PaperKind.Letter.ToString());
lstPaper.Items.Add(PaperKind.CSheet.ToString());
//Add all the printer resolutions to the list box
lstRes.Items.Add(PrinterResolutionKind.Custom.ToString());
lstRes.Items.Add(PrinterResolutionKind.Draft.ToString());
lstRes.Items.Add(PrinterResolutionKind.High.ToString());
lstRes.Items.Add(PrinterResolutionKind.Low.ToString());
lstRes.Items.Add(PrinterResolutionKind.Medium.ToString());
}
private void cmdStartPrint_Click(object sender, System.EventArgs e)
{
try
{
file = new StreamReader("Test.txt");
try
{
//Create the document and give it a somewhat unique name
Pd = new PrintDocument();
Pd.DocumentName = DateTime.Now.Millisecond.ToString();
//Install event handlers
Pd.BeginPrint += new PrintEventHandler(this.BeginPrint);
Pd.PrintPage += new PrintPageEventHandler(this.PagePrint);
Pd.EndPrint += new PrintEventHandler(this.EndPrint);
// Print the document.
Pd.Print();
}
finally
{
file.Close();
if (Pd != null)
Pd.Dispose();
if (Pf != null)
Pf.Dispose();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void BeginPrint1(object sender, PrintEventArgs ev)
{
PageSettings Psettings = Pd.DefaultPageSettings;
//Initialize the font
Pf = new Font("Times New Roman", 10);
Pd.PrinterSettings.PrinterName = cmbPrinters.SelectedItem.ToString();
foreach (PaperSize ps in Pd.PrinterSettings.PaperSizes)
{
if (ps.PaperName == lstPaper.SelectedItem.ToString())
{
Psettings.PaperSize = ps;
break;
}
}
foreach (PrinterResolution pr in Pd.PrinterSettings.PrinterResolutions)
{
if (pr.Kind.ToString() == lstRes.SelectedItem.ToString())
{
Psettings.PrinterResolution = pr;
break;
}
}
//Make 1/4 inch margins all around
Psettings.Margins = new Margins(25, 25, 25, 25);
Pd.DefaultPageSettings = Psettings;
//Reset the pages
Pages = 0;
}
private void EndPrint(object sender, PrintEventArgs ev)
{
Pf.Dispose();
}
// The PrintPage event is raised for each page to be printed.
private void PagePrint(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;
//Keep track of pages as they are printed
if (++Pages == 2)
{
try
{
ev.PageSettings.Landscape = true;
}
catch (Exception ex)
{
ev.PageSettings.Landscape = false;
}
}
else
ev.PageSettings.Landscape = false;
// Calculate the number of lines per page.
linesPerPage = ev.MarginBounds.Height / Pf.GetHeight(ev.Graphics);
// Iterate over the file, printing each line. Use a basic StringFormat
while (count++ < linesPerPage && ((line=file.ReadLine()) != null))
{
yPos = topMargin + (count * Pf.GetHeight(ev.Graphics));
ev.Graphics.DrawString (line, Pf, Brushes.Black,
leftMargin, yPos, new StringFormat());
}
// If more lines exist, print another page.
if (line != null)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}
}
}