Csharp/C Sharp/GUI Windows Form/Print
Содержание
Basic Printing
<source lang="csharp"> /* Professional Windows GUI Programming Using C# by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury,
Zach Greenvoss, Shripad Kulkarni, Neil Whitlow
Publisher: Peer Information ISBN: 1861007663
- /
using System; using System.Drawing.Printing; using System.Drawing; namespace BasicPrinting {
public class PrintSample { [STAThread] static void Main(string[] args) { PrintSample oSample = new PrintSample(); oSample.RunSample(); } public void RunSample() { Console.WriteLine("Printing to the default printer..."); try { PrintDocument pd = new PrintDocument(); pd.PrintPage += new PrintPageEventHandler(this.PrintPageEvent); pd.Print(); } catch(Exception ex) { Console.WriteLine("Error printing -- " + ex.ToString()); } //Read input - to delay the closing of the DOS shell Console.ReadLine(); } //Event fired for each page to print private void PrintPageEvent(object sender, PrintPageEventArgs ev) { string strHello = "Hello Printer!"; Font oFont = new Font("Arial",10); Rectangle marginRect = ev.MarginBounds; ev.Graphics.DrawRectangle(new Pen(System.Drawing.Color.Black),marginRect); ev.Graphics.DrawString(strHello,oFont,new SolidBrush(System.Drawing.Color.Blue), (ev.PageBounds.Right/2), ev.PageBounds.Bottom/2); } }
}
</source>
Begin Print
<source lang="csharp"> /* 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.ruponentModel; using System.Windows.Forms; using System.Data; namespace BeginPrint_c {
/// <summary> /// Summary description for BeginPrint. /// </summary> 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.ruboBox 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.ruponentModel.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 /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.cmbPrinters = new System.Windows.Forms.ruboBox(); 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.ruboBoxStyle.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; } }
}
</source>
Control Print
<source lang="csharp"> /* Code revised from chapter 7
GDI+ Custom Controls with Visual C# 2005 By Iulian Serban, Dragos Brezoi, Tiberiu Radu, Adam Ward Language English Paperback 272 pages [191mm x 235mm] Release date July 2006 ISBN 1904811604 Sample chapter http://www.packtpub.ru/files/1604_CustomControls_SampleChapter.pdf
For More info on GDI+ Custom Control with Microsoft Visual C# book visit website www.packtpub.ru
- /
using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Printing; namespace PrintingCustomControlApp1 {
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { printableRichTextBox1.Print(false); } private System.ruponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.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.printableRichTextBox1 = new PrintingCustomControlApp1.PrintableRichTextBox(); this.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // printableRichTextBox1 // this.printableRichTextBox1.Location = new System.Drawing.Point(77, 25); this.printableRichTextBox1.Name = "printableRichTextBox1"; this.printableRichTextBox1.Size = new System.Drawing.Size(124, 117); this.printableRichTextBox1.TabIndex = 0; this.printableRichTextBox1.Text = ""; // // button1 // this.button1.Location = new System.Drawing.Point(63, 191); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(126, 30); this.button1.TabIndex = 1; this.button1.Text = "Print the Control text"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.button1); this.Controls.Add(this.printableRichTextBox1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion private PrintableRichTextBox printableRichTextBox1; private System.Windows.Forms.Button button1; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } public partial class PrintableRichTextBox : RichTextBox { public PrintableRichTextBox() { InitializeComponent(); _prtdoc = new PrintDocument(); _prtdoc.PrintPage += new PrintPageEventHandler(_prtdoc_PrintPage); } string _text = null; int _pageNumber = 0; int _start = 0; PrintDocument _prtdoc = null; private bool DrawText(Graphics target, Graphics measurer, RectangleF r, Brush brsh) { if (r.Height < this.Font.Height) throw new ArgumentException("The rectangle is not tall enough to fit a single line of text inside."); int charsFit = 0; int linesFit = 0; int cut = 0; string temp = _text.Substring(_start); StringFormat format = new StringFormat(StringFormatFlags.FitBlackBox | StringFormatFlags.LineLimit); //measure how much of the string we can fit into the rectangle measurer.MeasureString(temp, this.Font, r.Size, format, out charsFit, out linesFit); cut = BreakText(temp, charsFit); if (cut != charsFit) temp = temp.Substring(0, cut); bool h = true; h &= true; target.DrawString(temp.Trim(" "), this.Font, brsh, r, format); _start += cut; if (_start == _text.Length) { _start = 0; //reset the location so we can repeat the document return true; //finished printing } else return false; } private static int BreakText(string text, int approx) { if (approx == 0) throw new ArgumentException(); if (approx < text.Length) { //are we in the middle of a word? if (char.IsLetterOrDigit(text[approx]) && char.IsLetterOrDigit(text[approx - 1])) { int temp = text.LastIndexOf(" ", approx, approx + 1); if (temp >= 0) return temp; } } return approx; } public void Print(bool hardcopy) { _text = this.Text; //create a PrintDialog based on the PrintDocument PrintDialog pdlg = new PrintDialog(); pdlg.Document = _prtdoc; //show the PrintDialog if (pdlg.ShowDialog() == DialogResult.OK) { //create a PageSetupDialog based on the PrintDocument and PrintDialog PageSetupDialog psd = new PageSetupDialog(); psd.EnableMetric = true; //Ensure all dialog measurements are in metric psd.Document = pdlg.Document; //show the PageSetupDialog if (psd.ShowDialog() == DialogResult.OK) { //apply the settings of both dialogs _prtdoc.DefaultPageSettings = psd.PageSettings; //decide what action to take if (hardcopy) { //actually print hardcopy _prtdoc.Print(); } else { //preview onscreen instead PrintPreviewDialog prvw = new PrintPreviewDialog(); prvw.Document = _prtdoc; prvw.ShowDialog(); } } } } private void _prtdoc_PrintPage(object sender, PrintPageEventArgs e) { e.Graphics.Clip = new Region(e.MarginBounds); //this method does all our printing work Single x = e.MarginBounds.Left; Single y = e.MarginBounds.Top; if (_pageNumber++ == 0) y += 30; RectangleF mainTextArea = RectangleF.FromLTRB(x, y, e.MarginBounds.Right, e.MarginBounds.Bottom); //draw the text if (DrawText(e.Graphics, e.PageSettings.PrinterSettings.CreateMeasurementGraphics(), mainTextArea, Brushes.Black)) { e.HasMorePages = false; //the end has been reached _pageNumber = 0; } else e.HasMorePages = true; } private System.ruponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Component 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() { components = new System.ruponentModel.Container(); //this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; } #endregion }
}
</source>
Define Print Settings
<source lang="csharp"> /* GDI+ Programming in C# and VB .NET by Nick Symmonds Publisher: Apress ISBN: 159059035X
- /
using System; using System.Drawing.Printing; namespace DefPrintSettings_c {
public class DefPrintSettings { [STAThread] static void Main(string[] args) { PrintDocument pd = new PrintDocument(); PageSettings pg = pd.DefaultPageSettings; PrinterSettings ps = pg.PrinterSettings; Console.WriteLine("Printer Settings"); Console.WriteLine("PrinterName = " + pd.PrinterSettings.PrinterName); Console.WriteLine("Is default Printer = " + ps.IsDefaultPrinter.ToString()); Console.WriteLine("Is plotter = " + ps.IsPlotter.ToString()); Console.WriteLine("Is printer valid = " + ps.IsValid.ToString()); Console.WriteLine("Can Duplex = " + ps.IsValid.ToString()); Console.WriteLine("Num copies = " + ps.Copies.ToString()); Console.WriteLine("Max Copies = " + ps.MaximumCopies.ToString()); Console.WriteLine("Max Page = " + ps.MaximumPage.ToString()); Console.WriteLine("Min Page = " + ps.MinimumPage.ToString()); Console.WriteLine("Supports Color = " + ps.SupportsColor.ToString()); foreach (PaperSize p in ps.PaperSizes) Console.WriteLine("Supports Paper Size: " + p.PaperName); foreach (PaperSource p in ps.PaperSources) Console.WriteLine("Supports Paper Source: " + p.SourceName); Console.WriteLine("\nPage Settings"); Console.WriteLine("Is Color = " + pg.Color.ToString()); Console.WriteLine("Top Bound = " + pg.Bounds.Top.ToString()); Console.WriteLine("Bottom Bound = " + pg.Bounds.Bottom.ToString()); Console.WriteLine("Left Bound = " + pg.Bounds.Left.ToString()); Console.WriteLine("Right Bound = " + pg.Bounds.Right.ToString()); Console.WriteLine("Top Margin = " + pg.Margins.Top.ToString()); Console.WriteLine("Bottom Margin = " + pg.Margins.Bottom.ToString()); Console.WriteLine("Left Margin = " + pg.Margins.Left.ToString()); Console.WriteLine("Right Margin = " + pg.Margins.Right.ToString()); Console.WriteLine("Landscape = " + pg.Landscape.ToString()); Console.WriteLine("PaperSize = " + pg.PaperSize.PaperName); Console.WriteLine("PaperSource = " + pg.PaperSource.SourceName); Console.WriteLine("PrinterResolution = " + pg.PrinterResolution.Kind.ToString()); Console.WriteLine("PrinterResolution X = " + pg.PrinterResolution.X.ToString()); Console.WriteLine("PrinterResolution Y = " + pg.PrinterResolution.Y.ToString()); Console.ReadLine(); } }
}
</source>
Grid Printing
<source lang="csharp"> /* Professional Windows GUI Programming Using C# by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury,
Zach Greenvoss, Shripad Kulkarni, Neil Whitlow
Publisher: Peer Information ISBN: 1861007663
- /
using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Data.SqlClient; using System.Drawing.Printing; namespace GridPrinting {
/// <summary> /// Summary description for Form1. /// </summary> public class GridPrintingDemo : System.Windows.Forms.Form { //Stored Page Settings object private PageSettings oPageSettings; private System.Windows.Forms.MenuItem menuItem1; private System.Windows.Forms.MenuItem menuItem2; private System.ruponentModel.Container components = null; private System.Windows.Forms.MainMenu mnuMain; private System.Windows.Forms.PrintPreviewDialog ppDialog; private System.Windows.Forms.MenuItem menuItem3; private System.Windows.Forms.MenuItem menuItem4; private System.Windows.Forms.PrintDialog oPrintDialog; private System.Windows.Forms.MenuItem menuItem5; private System.Windows.Forms.MenuItem menuItem6; private System.Windows.Forms.PageSetupDialog oPageSetup; private System.Windows.Forms.DataGrid dGrid; public GridPrintingDemo() { // // Required for Windows Form Designer support // InitializeComponent(); oPageSettings = new PageSettings(); } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.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() {
// System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(GridPrintingDemo));
this.dGrid = new System.Windows.Forms.DataGrid(); this.mnuMain = new System.Windows.Forms.MainMenu(); this.menuItem1 = new System.Windows.Forms.MenuItem(); this.menuItem3 = new System.Windows.Forms.MenuItem(); this.menuItem4 = new System.Windows.Forms.MenuItem(); this.menuItem2 = new System.Windows.Forms.MenuItem(); this.menuItem5 = new System.Windows.Forms.MenuItem(); this.menuItem6 = new System.Windows.Forms.MenuItem(); this.ppDialog = new System.Windows.Forms.PrintPreviewDialog(); this.oPrintDialog = new System.Windows.Forms.PrintDialog(); this.oPageSetup = new System.Windows.Forms.PageSetupDialog(); ((System.ruponentModel.ISupportInitialize)(this.dGrid)).BeginInit(); this.SuspendLayout(); // // dGrid // this.dGrid.DataMember = ""; this.dGrid.Dock = System.Windows.Forms.DockStyle.Fill; this.dGrid.HeaderForeColor = System.Drawing.SystemColors.ControlText; this.dGrid.Name = "dGrid"; this.dGrid.Size = new System.Drawing.Size(292, 266); this.dGrid.TabIndex = 0; // // mnuMain // this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItem1}); // // menuItem1 // this.menuItem1.Index = 0; this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItem3, this.menuItem4, this.menuItem2, this.menuItem5, this.menuItem6}); this.menuItem1.Text = "&File"; // // menuItem3 // this.menuItem3.Index = 0; this.menuItem3.Text = "Page Setup..."; this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click); // // menuItem4 // this.menuItem4.Index = 1; this.menuItem4.Text = "Print..."; this.menuItem4.Click += new System.EventHandler(this.menuItem4_Click); // // menuItem2 // this.menuItem2.Index = 2; this.menuItem2.Text = "Print Preview..."; this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click); // // menuItem5 // this.menuItem5.Index = 3; this.menuItem5.Text = "-"; // // menuItem6 // this.menuItem6.Index = 4; this.menuItem6.Text = "Exit"; // // ppDialog // this.ppDialog.AutoScrollMargin = new System.Drawing.Size(0, 0); this.ppDialog.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.ppDialog.ClientSize = new System.Drawing.Size(400, 300); this.ppDialog.Enabled = true;
// this.ppDialog.Icon = ((System.Drawing.Icon)(resources.GetObject("ppDialog.Icon")));
this.ppDialog.Location = new System.Drawing.Point(121, 21); this.ppDialog.MaximumSize = new System.Drawing.Size(0, 0); this.ppDialog.Name = "ppDialog"; this.ppDialog.Opacity = 1; this.ppDialog.TransparencyKey = System.Drawing.Color.Empty; this.ppDialog.Visible = false; // // oPrintDialog // this.oPrintDialog.AllowSomePages = true; // // GridPrintingDemo // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.dGrid}); this.Menu = this.mnuMain; this.Name = "GridPrintingDemo"; this.Text = "Printing Grid Example"; this.Load += new System.EventHandler(this.Form1_Load); ((System.ruponentModel.ISupportInitialize)(this.dGrid)).EndInit(); this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new GridPrintingDemo()); } private void Form1_Load(object sender, System.EventArgs e) { try { //COnnection to database - get dataset SqlConnection aConn = new SqlConnection("data source=HOBBIT;initial catalog=Northwind;integrated security=SSPI;"); SqlDataAdapter sqlAdapter = new SqlDataAdapter("Select CompanyName, Address, City, Region, PostalCode, Country from Customers",aConn); DataSet aDataSet = new DataSet(); sqlAdapter.Fill(aDataSet); //Assign dataset to Grid dGrid.DataSource = aDataSet; dGrid.SetDataBinding(aDataSet.Tables[0],""); } catch(Exception ex) { MessageBox.Show(ex.ToString(),"Error"); } } private void menuItem2_Click(object sender, System.EventArgs e) { //Setup the document to print PrintGridDocument aDoc = new PrintGridDocument(dGrid); aDoc.Title = "Employee Report"; oPrintDialog.Document = aDoc; if (oPrintDialog.ShowDialog() == DialogResult.OK) { //Display the print preview dialog aDoc.DefaultPageSettings = oPageSettings; ppDialog.Document = aDoc; ppDialog.ShowDialog(); } } private void menuItem3_Click(object sender, System.EventArgs e) { oPageSetup.PageSettings = oPageSettings; if(oPageSetup.ShowDialog() == DialogResult.OK) { oPageSettings = oPageSetup.PageSettings; } } private void menuItem4_Click(object sender, System.EventArgs e) { //Setup the document to print PrintGridDocument aDoc = new PrintGridDocument(dGrid); aDoc.Title = "Employee Report"; oPrintDialog.Document = aDoc; if (oPrintDialog.ShowDialog() == DialogResult.OK) { //Display the print preview dialog aDoc.DefaultPageSettings = oPageSettings; try { //Print the document aDoc.Print(); } catch(Exception ex) { //Display any errors MessageBox.Show(ex.ToString()); } } } } public class PrintGridDocument : PrintDocument { //Data Members private DataGrid m_oDataGrid; private int m_nCurrPage; private int m_nCurrRow; private int m_nColumns; private int m_nRows; private bool m_bInitialized; private int m_nLinesPerPage; private int m_nTotalPages; private int[] m_nColBounds; //Properties public Font PrintFont; public string Title; public PrintGridDocument(DataGrid aGrid) : base() { //Default Values m_oDataGrid = aGrid; m_nCurrPage = 0; m_nCurrRow = 0; m_bInitialized = false; //Get total number of cols/rows in the data source m_nColumns = ((DataTable)(m_oDataGrid.DataSource)).Columns.Count; m_nRows = ((DataTable)(m_oDataGrid.DataSource)).Rows.Count; } //Override OnBeginPrint to set up the font we are going to use protected override void OnBeginPrint(PrintEventArgs ev) { base.OnBeginPrint(ev); //If client has not created a font, create a default font // Note: an exception could be raised here, but it is deliberately not // being caught because there is nothing we could do at this point! if(PrintFont == null) PrintFont = new Font("Arial", 9); } //Override the OnPrintPage to provide the printing logic for the document protected override void OnPrintPage(PrintPageEventArgs e) { //Call base method base.OnPrintPage(e); //Get the margins int nTextPosX = e.MarginBounds.Left; int nTextPosY = e.MarginBounds.Top; //Do first time initialization stuff if(!m_bInitialized) { // Calculate the number of lines per page. m_nLinesPerPage = (int)(e.MarginBounds.Height / PrintFont.GetHeight(e.Graphics)); m_nTotalPages = (int)Math.Ceiling((float)m_nRows / (float)m_nLinesPerPage); //Create bounding box for columns m_nColBounds = new int[m_nColumns]; //Calculate the correct spacing for the columns for(int nCol = 0;nCol<m_nColumns;nCol++) { //Measure the column headers first m_nColBounds[nCol] = (int)e.Graphics.MeasureString( ((DataTable)(m_oDataGrid.DataSource)).Columns[nCol].ColumnName, PrintFont).Width; for(int nRow=0;nRow<m_nRows;nRow++) { //Compare data to current max if(e.Graphics.MeasureString(m_oDataGrid[nRow,nCol].ToString(),PrintFont).Width > m_nColBounds[nCol]) m_nColBounds[nCol] = (int)e.Graphics.MeasureString(m_oDataGrid[nRow,nCol].ToString(),PrintFont).Width; } //Just use max possible size if too large if(m_nColBounds[nCol] > e.MarginBounds.Width / m_nColumns) m_nColBounds[nCol] = e.MarginBounds.Width / m_nColumns; //Can"t be less than column width if(m_nColBounds[nCol] < (int)Math.Round(e.Graphics.MeasureString(((DataTable)(m_oDataGrid.DataSource)).Columns[nCol].ColumnName, PrintFont).Width)) m_nColBounds[nCol] = (int)Math.Round(e.Graphics.MeasureString(((DataTable)(m_oDataGrid.DataSource)).Columns[nCol].ColumnName, PrintFont).Width); } //Move to correct starting page if(this.PrinterSettings.PrintRange == PrintRange.SomePages) { while(m_nCurrPage < this.PrinterSettings.FromPage-1) { //Move to next page - advance data to next page as well m_nCurrRow += m_nLinesPerPage; m_nCurrPage++; if(m_nCurrRow > m_nRows) return; } if(m_nCurrPage > this.PrinterSettings.ToPage) { //Don"t print anything more return; } } //Set flag m_bInitialized = true; } //Move to next page m_nCurrPage++; //Print Title if first page if(m_nCurrPage == 1) { Font TitleFont = new Font("Arial",15); int nXPos = (int)(((e.PageBounds.Right - e.PageBounds.Left) /2 ) - (e.Graphics.MeasureString(Title,TitleFont).Width / 2)); e.Graphics.DrawString(Title,TitleFont,Brushes.Black,nXPos,e.MarginBounds.Top - TitleFont.GetHeight(e.Graphics) - 10); } //Draw page number string strOutput = "Page " + m_nCurrPage + " of " + m_nTotalPages; e.Graphics.DrawString(strOutput,PrintFont,Brushes.Black,e.MarginBounds.Right - e.Graphics.MeasureString(strOutput,PrintFont).Width, e.MarginBounds.Bottom); //Utility rectangle - use for many drawing operations Rectangle aRect = new Rectangle(); //Loop through data for(int nRow=m_nCurrRow; nRow < m_nRows; nRow++) { //Draw the current row within a shaded/unshaded box aRect.X = e.MarginBounds.Left; aRect.Y = nTextPosY; aRect.Width = e.MarginBounds.Width; aRect.Height = (int)PrintFont.GetHeight(e.Graphics); //Draw the box if(nRow%2 == 0) e.Graphics.FillRectangle(Brushes.LightGray,aRect); e.Graphics.DrawRectangle(Pens.Black,aRect); //Loop through each column for(int nCol=0; nCol < m_nColumns; nCol++) { //Set the rectangle to the correct position aRect.X = nTextPosX; aRect.Y = nTextPosY; aRect.Width = m_nColBounds[nCol]; aRect.Height = (int)PrintFont.GetHeight(e.Graphics); //Print the data e.Graphics.DrawString(m_oDataGrid[nRow,nCol].ToString(),PrintFont,Brushes.Black,aRect); //Advance the x Position counter nTextPosX += m_nColBounds[nCol]; } //Reassign the x position counter nTextPosX = e.MarginBounds.Left; //Move the y position counter down a line nTextPosY += (int)PrintFont.GetHeight(e.Graphics); //Check to see if we have reached the line limit - move to a new page if so if(nRow - ((m_nCurrPage-1) * m_nLinesPerPage) == m_nLinesPerPage) { //Save the current row m_nCurrRow = ++nRow; e.HasMorePages = true; return; } } } }
}
</source>
Print Dialogs
<source lang="csharp"> /* GDI+ Programming in C# and VB .NET by Nick Symmonds Publisher: Apress ISBN: 159059035X
- /
using System; using System.Drawing; using System.Drawing.Printing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; namespace PrintDialogs_c {
public class PrintDialogs : System.Windows.Forms.Form { private Image MyImage; private PrintDocument pd; private PrintPreviewDialog Preview; private System.Windows.Forms.Button cmdShow; private System.Windows.Forms.Label lblPrint; private System.ruponentModel.Container components = null; public PrintDialogs() { InitializeComponent(); MyImage = Bitmap.FromFile(@"d:\colorbars.jpg"); Preview = new PrintPreviewDialog(); Preview.UseAntiAlias = true; } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.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.cmdShow = new System.Windows.Forms.Button(); this.lblPrint = new System.Windows.Forms.Label(); this.SuspendLayout(); // // cmdShow // this.cmdShow.Location = new System.Drawing.Point(352, 344); this.cmdShow.Name = "cmdShow"; this.cmdShow.Size = new System.Drawing.Size(72, 24); this.cmdShow.TabIndex = 0; this.cmdShow.Text = "Show"; this.cmdShow.Click += new System.EventHandler(this.cmdShow_Click); // // lblPrint // this.lblPrint.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.lblPrint.Location = new System.Drawing.Point(144, 32); this.lblPrint.Name = "lblPrint"; this.lblPrint.Size = new System.Drawing.Size(280, 136); this.lblPrint.TabIndex = 1; // // PrintDialogs // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(442, 373); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.lblPrint, this.cmdShow}); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "PrintDialogs"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "PrintDialogs"; this.Load += new System.EventHandler(this.PrintDialogs_Load); this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new PrintDialogs()); } private void PrintDialogs_Load(object sender, System.EventArgs e) { pd = new PrintDocument(); pd.PrintPage += new PrintPageEventHandler(this.pd_Print); Preview.Document = pd; } protected override void OnPaint(PaintEventArgs e) { DrawIt(e.Graphics); } private void pd_Print(object sender, PrintPageEventArgs e) { lblPrint.Text += "pd_Print pd= " + sender.ToString() + "\n" ; DrawIt(e.Graphics); } private void DrawIt(Graphics G) { G.SmoothingMode=SmoothingMode.AntiAlias; G.DrawImage(MyImage, 10, 10); LinearGradientBrush B = new LinearGradientBrush( new Rectangle(0, 0, 50, 10), Color.Red, Color.Blue, LinearGradientMode.ForwardDiagonal); G.FillEllipse(B, 10, 200, 200, 75); G.DrawString("Print Preview Test", new Font("Comic Sans MS",24), B, 50, 275); } private void cmdShow_Click(object sender, System.EventArgs e) { Preview.WindowState = FormWindowState.Maximized; pd.DocumentName = DateTime.Now.Ticks.ToString(); Preview.ShowDialog(); } }
}
</source>
Printer Caps 1
<source lang="csharp"> /* Professional Windows GUI Programming Using C# by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury,
Zach Greenvoss, Shripad Kulkarni, Neil Whitlow
Publisher: Peer Information ISBN: 1861007663
- /
using System.Drawing.Printing; using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; //Need Printing namespace using System.Drawing.Printing; namespace PrinterCaps1 {
public class PrinterCaps1 : System.Windows.Forms.Form { private System.ruponentModel.Container components = null; public PrinterCaps1() { InitializeComponent(); } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.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() { // // PrinterCaps1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Name = "PrinterCaps1"; this.Text = "Printer Caps"; this.Paint += new System.Windows.Forms.PaintEventHandler(this.PrinterCaps1_Paint); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new PrinterCaps1()); }
private void PrinterCaps1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { PrinterSettings pSettings = new PrinterSettings(); Font printFont = new Font("Arial", 10); //Position int nTextPosY = 0; int nTextPosX = 5; int nHeight = (int)printFont.GetHeight(e.Graphics); foreach(string sPtr in PrinterSettings.InstalledPrinters) { //pSettings.PrinterName = sPtr; pSettings.PrinterName = "BadName"; //if(pSettings.IsValid) //{ e.Graphics.DrawString(sPtr, printFont,Brushes.Black, nTextPosX, nTextPosY + 5); e.Graphics.DrawString("Can Duplex: " + pSettings.CanDuplex.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight)); e.Graphics.DrawString("Is Default: " + pSettings.IsDefaultPrinter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*2)); e.Graphics.DrawString("Is Plotter: " + pSettings.IsPlotter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*3)); e.Graphics.DrawString("Landscape Angle: " + pSettings.LandscapeAngle.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*4)); e.Graphics.DrawString("Maximum Copies: " + pSettings.MaximumCopies.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*5)); e.Graphics.DrawString("Maximum Page: " + pSettings.MaximumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*6)); e.Graphics.DrawString("Minimum Page: " + pSettings.MinimumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*7)); e.Graphics.DrawString("Supports Color: " + pSettings.SupportsColor.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*8)); nTextPosY = nTextPosY + ((5 + nHeight*8) + nHeight); //} } return; } }
}
</source>
Printer Caps 2
<source lang="csharp"> /* Professional Windows GUI Programming Using C# by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury,
Zach Greenvoss, Shripad Kulkarni, Neil Whitlow
Publisher: Peer Information ISBN: 1861007663
- /
using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; //Need this namespace to access the Printing functionality using System.Drawing.Printing; namespace PrinterCaps2 {
/// <summary> /// Summary description for Form1. /// </summary> public class PrinterCaps2 : System.Windows.Forms.Form { private System.Drawing.Printing.PrintDocument printDoc; private System.Windows.Forms.PrintPreviewDialog ppDialog; private System.Windows.Forms.Button btnPrint; /// <summary> /// Required designer variable. /// </summary> private System.ruponentModel.Container components = null; public PrinterCaps2() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.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() {
// System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(PrinterCaps2));
this.printDoc = new System.Drawing.Printing.PrintDocument(); this.ppDialog = new System.Windows.Forms.PrintPreviewDialog(); this.btnPrint = new System.Windows.Forms.Button(); this.SuspendLayout(); // // printDoc // this.printDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDoc_PrintPage); // // ppDialog // this.ppDialog.AutoScrollMargin = new System.Drawing.Size(0, 0); this.ppDialog.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.ppDialog.ClientSize = new System.Drawing.Size(400, 300); this.ppDialog.Enabled = true;
// this.ppDialog.Icon = ((System.Drawing.Icon)(resources.GetObject("ppDialog.Icon")));
this.ppDialog.Location = new System.Drawing.Point(195, 22); this.ppDialog.MaximumSize = new System.Drawing.Size(0, 0); this.ppDialog.Name = "ppDialog"; this.ppDialog.Opacity = 1; this.ppDialog.TransparencyKey = System.Drawing.Color.Empty; this.ppDialog.Visible = false; // // btnPrint // this.btnPrint.Location = new System.Drawing.Point(52, 28); this.btnPrint.Name = "btnPrint"; this.btnPrint.TabIndex = 0; this.btnPrint.Text = "Print"; this.btnPrint.Click += new System.EventHandler(this.btnPrint_Click); // // PrinterCaps2 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(176, 86); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.btnPrint}); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Name = "PrinterCaps2"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Printer Caps"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new PrinterCaps2()); } private void printDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { PrinterSettings pSettings = new PrinterSettings(); Font printFont = new Font("Arial", 12); //Use the Margins int nTextPosY = e.MarginBounds.Top; int nTextPosX = e.MarginBounds.Left; int nHeight = (int)printFont.GetHeight(e.Graphics); foreach(string sPtr in PrinterSettings.InstalledPrinters) { pSettings.PrinterName = sPtr; if(pSettings.IsValid) { e.Graphics.DrawString(sPtr, printFont,Brushes.Black, nTextPosX, nTextPosY + 5); e.Graphics.DrawString("Can Duplex: " + pSettings.CanDuplex.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight)); e.Graphics.DrawString("Is Default: " + pSettings.IsDefaultPrinter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*2)); e.Graphics.DrawString("Is Plotter: " + pSettings.IsPlotter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*3)); e.Graphics.DrawString("Landscape Angle: " + pSettings.LandscapeAngle.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*4)); e.Graphics.DrawString("Maximum Copies: " + pSettings.MaximumCopies.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*5)); e.Graphics.DrawString("Maximum Page: " + pSettings.MaximumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*6)); e.Graphics.DrawString("Minimum Page: " + pSettings.MinimumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*7)); e.Graphics.DrawString("Supports Color: " + pSettings.SupportsColor.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*8)); nTextPosY = nTextPosY + ((5 + nHeight*8) + nHeight); } } }
private void btnPrint_Click(object sender, System.EventArgs e) { try { ppDialog.Document = printDoc; ppDialog.ShowDialog(); } catch(Exception ex) { MessageBox.Show(ex.ToString()); } } }
}
</source>
Printer Caps 3
<source lang="csharp"> /* Professional Windows GUI Programming Using C# by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury,
Zach Greenvoss, Shripad Kulkarni, Neil Whitlow
Publisher: Peer Information ISBN: 1861007663
- /
using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Printing; namespace PrinterCaps3 {
public class PrinterCaps3 : System.Windows.Forms.Form { private int m_nCurrPrinter; private System.Drawing.Printing.PrintDocument printDoc; private System.Windows.Forms.PrintPreviewDialog ppDialog; private System.Windows.Forms.Button btnPrint; private System.ruponentModel.Container components = null; public PrinterCaps3() { // // Required for Windows Form Designer support // InitializeComponent(); } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.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() { // System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(PrinterCaps3)); this.printDoc = new System.Drawing.Printing.PrintDocument(); this.ppDialog = new System.Windows.Forms.PrintPreviewDialog(); this.btnPrint = new System.Windows.Forms.Button(); this.SuspendLayout(); // // printDoc // this.printDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDoc_PrintPage); // // ppDialog // this.ppDialog.AutoScrollMargin = new System.Drawing.Size(0, 0); this.ppDialog.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.ppDialog.ClientSize = new System.Drawing.Size(400, 300); this.ppDialog.Enabled = true;
// this.ppDialog.Icon = ((System.Drawing.Icon)(resources.GetObject("ppDialog.Icon")));
this.ppDialog.Location = new System.Drawing.Point(195, 22); this.ppDialog.MaximumSize = new System.Drawing.Size(0, 0); this.ppDialog.Name = "ppDialog"; this.ppDialog.Opacity = 1; this.ppDialog.TransparencyKey = System.Drawing.Color.Empty; this.ppDialog.Visible = false; // // btnPrint // this.btnPrint.Location = new System.Drawing.Point(52, 28); this.btnPrint.Name = "btnPrint"; this.btnPrint.TabIndex = 0; this.btnPrint.Text = "Print"; this.btnPrint.Click += new System.EventHandler(this.btnPrint_Click); // // PrinterCaps3 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(176, 86); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.btnPrint}); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Name = "PrinterCaps3"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Printer Caps"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new PrinterCaps3()); } private void printDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { PrinterSettings pSettings = new PrinterSettings(); Font printFont = new Font("Arial", 12); //Use the Margins int nTextPosY = e.MarginBounds.Top; int nTextPosX = e.MarginBounds.Left; int nHeight = (int)printFont.GetHeight(e.Graphics); //Height of a printer block int nBlockHeight = 9 * nHeight; //Loop through using indexor now //Start with the previous index in m_nCurrPrinter for(int x = m_nCurrPrinter;x< PrinterSettings.InstalledPrinters.Count; x++)//each(string sPtr in PrinterSettings.InstalledPrinters) { pSettings.PrinterName = PrinterSettings.InstalledPrinters[x]; if(pSettings.IsValid) { //Ensure this printer block can fit on the page if(nTextPosY + nBlockHeight < e.MarginBounds.Bottom) { //Print the caps of the printer e.Graphics.DrawString(PrinterSettings.InstalledPrinters[x], printFont,Brushes.Black, nTextPosX, nTextPosY + 5); e.Graphics.DrawString("Can Duplex: " + pSettings.CanDuplex.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight)); e.Graphics.DrawString("Is Default: " + pSettings.IsDefaultPrinter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*2)); e.Graphics.DrawString("Is Plotter: " + pSettings.IsPlotter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*3)); e.Graphics.DrawString("Landscape Angle: " + pSettings.LandscapeAngle.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*4)); e.Graphics.DrawString("Maximum Copies: " + pSettings.MaximumCopies.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*5)); e.Graphics.DrawString("Maximum Page: " + pSettings.MaximumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*6)); e.Graphics.DrawString("Minimum Page: " + pSettings.MinimumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*7)); e.Graphics.DrawString("Supports Color: " + pSettings.SupportsColor.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*8)); nTextPosY = nTextPosY + ((5 + nHeight*8) + nHeight); } else { //Could nto fit block on the page - need more pages m_nCurrPrinter = x; e.HasMorePages = true; return; } } } //Last page if we reached here e.HasMorePages = false; m_nCurrPrinter = 0; return; }
private void btnPrint_Click(object sender, System.EventArgs e) { //Set to defaults m_nCurrPrinter = 0; try { ppDialog.Document = printDoc; ppDialog.ShowDialog(); } catch(Exception ex) { MessageBox.Show(ex.ToString()); } } }
}
</source>
Printer Caps 4
<source lang="csharp"> /* Professional Windows GUI Programming Using C# by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury,
Zach Greenvoss, Shripad Kulkarni, Neil Whitlow
Publisher: Peer Information ISBN: 1861007663
- /
using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Printing; using System.Drawing.Drawing2D; namespace PrinterCaps4 {
public class PrinterCaps4 : System.Windows.Forms.Form { private int m_nCurrPrinter; private System.Drawing.Printing.PrintDocument printDoc; private System.Windows.Forms.PrintPreviewDialog ppDialog; private System.Windows.Forms.Button btnPrint; private System.ruponentModel.Container components = null; public PrinterCaps4() { // // Required for Windows Form Designer support // InitializeComponent(); } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.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() {
// System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(PrinterCaps4));
this.printDoc = new System.Drawing.Printing.PrintDocument(); this.ppDialog = new System.Windows.Forms.PrintPreviewDialog(); this.btnPrint = new System.Windows.Forms.Button(); this.SuspendLayout(); // // printDoc // this.printDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDoc_PrintPage); // // ppDialog // this.ppDialog.AutoScrollMargin = new System.Drawing.Size(0, 0); this.ppDialog.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.ppDialog.ClientSize = new System.Drawing.Size(400, 300); this.ppDialog.Enabled = true; // this.ppDialog.Icon = ((System.Drawing.Icon)(resources.GetObject("ppDialog.Icon"))); this.ppDialog.Location = new System.Drawing.Point(195, 22); this.ppDialog.MaximumSize = new System.Drawing.Size(0, 0); this.ppDialog.Name = "ppDialog"; this.ppDialog.Opacity = 1; this.ppDialog.TransparencyKey = System.Drawing.Color.Empty; this.ppDialog.Visible = false; // // btnPrint // this.btnPrint.Location = new System.Drawing.Point(52, 28); this.btnPrint.Name = "btnPrint"; this.btnPrint.TabIndex = 0; this.btnPrint.Text = "Print"; this.btnPrint.Click += new System.EventHandler(this.btnPrint_Click); // // PrinterCaps4 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(176, 86); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.btnPrint}); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Name = "PrinterCaps4"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Printer Caps"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new PrinterCaps4()); } private void printDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { PrinterSettings pSettings = new PrinterSettings(); Font printFont = new Font("Arial", 12); //Use the Margins int nTextPosY = e.MarginBounds.Top; int nTextPosX = e.MarginBounds.Left; int nHeight = (int)printFont.GetHeight(e.Graphics); //Height of a printer block int nBlockHeight = 9 * nHeight; //Print Background Graphic LinearGradientBrush aBrush = new LinearGradientBrush(e.MarginBounds,Color.FromArgb(100,Color.LightBlue), Color.FromArgb(100,Color.Blue),LinearGradientMode.ForwardDiagonal); e.Graphics.FillRectangle(aBrush,e.MarginBounds); //Loop through using indexor now //Start with the previous index in m_nCurrPrinter for(int x = m_nCurrPrinter;x< PrinterSettings.InstalledPrinters.Count; x++)//each(string sPtr in PrinterSettings.InstalledPrinters) { pSettings.PrinterName = PrinterSettings.InstalledPrinters[x]; if(pSettings.IsValid) { //Ensure this printer block can fit on the page if(nTextPosY + nBlockHeight < e.MarginBounds.Bottom) { //Print the caps of the printer e.Graphics.DrawString(PrinterSettings.InstalledPrinters[x], printFont,Brushes.Black, nTextPosX, nTextPosY + 5); e.Graphics.DrawString("Can Duplex: " + pSettings.CanDuplex.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight)); e.Graphics.DrawString("Is Default: " + pSettings.IsDefaultPrinter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*2)); e.Graphics.DrawString("Is Plotter: " + pSettings.IsPlotter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*3)); e.Graphics.DrawString("Landscape Angle: " + pSettings.LandscapeAngle.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*4)); e.Graphics.DrawString("Maximum Copies: " + pSettings.MaximumCopies.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*5)); e.Graphics.DrawString("Maximum Page: " + pSettings.MaximumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*6)); e.Graphics.DrawString("Minimum Page: " + pSettings.MinimumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*7)); e.Graphics.DrawString("Supports Color: " + pSettings.SupportsColor.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*8)); nTextPosY = nTextPosY + ((5 + nHeight*8) + nHeight); //Draw line after each e.Graphics.DrawLine(System.Drawing.Pens.Black,nTextPosX,nTextPosY,e.MarginBounds.Right - 10,nTextPosY); e.Graphics.FillEllipse(System.Drawing.Brushes.Black,e.MarginBounds.Right - 10,nTextPosY-5,10,10); } else { //Could nto fit block on the page - need more pages m_nCurrPrinter = x; e.HasMorePages = true; return; } } } //Last page if we reached here e.HasMorePages = false; m_nCurrPrinter = 0; return; }
private void btnPrint_Click(object sender, System.EventArgs e) { //Set to defaults m_nCurrPrinter = 0; try { ppDialog.Document = printDoc; ppDialog.ShowDialog(); } catch(Exception ex) { MessageBox.Show(ex.ToString()); } } }
}
</source>
Printer Caps 5
<source lang="csharp"> /* Professional Windows GUI Programming Using C# by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury,
Zach Greenvoss, Shripad Kulkarni, Neil Whitlow
Publisher: Peer Information ISBN: 1861007663
- /
using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Printing; using System.Drawing.Drawing2D; namespace PrinterCaps5 {
public class PrinterCaps5 : System.Windows.Forms.Form { private int m_nCurrPrinter; private int m_nCurrPage; private System.Drawing.Printing.PrintDocument printDoc; private System.Windows.Forms.PrintPreviewDialog ppDialog; private System.Windows.Forms.Button btnPrint; private System.Windows.Forms.PrintDialog oPrintDialog; private System.ruponentModel.Container components = null; public PrinterCaps5() { InitializeComponent(); } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.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() {
// System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(PrinterCaps5));
this.printDoc = new System.Drawing.Printing.PrintDocument(); this.ppDialog = new System.Windows.Forms.PrintPreviewDialog(); this.btnPrint = new System.Windows.Forms.Button(); this.oPrintDialog = new System.Windows.Forms.PrintDialog(); this.SuspendLayout(); // // printDoc // this.printDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDoc_PrintPage); // // ppDialog // this.ppDialog.AutoScrollMargin = new System.Drawing.Size(0, 0); this.ppDialog.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.ppDialog.ClientSize = new System.Drawing.Size(400, 300); this.ppDialog.Enabled = true; // this.ppDialog.Icon = ((System.Drawing.Icon)(resources.GetObject("ppDialog.Icon"))); this.ppDialog.Location = new System.Drawing.Point(142, 13); this.ppDialog.MaximumSize = new System.Drawing.Size(0, 0); this.ppDialog.Name = "ppDialog"; this.ppDialog.Opacity = 1; this.ppDialog.TransparencyKey = System.Drawing.Color.Empty; this.ppDialog.Visible = false; // // btnPrint // this.btnPrint.Location = new System.Drawing.Point(52, 28); this.btnPrint.Name = "btnPrint"; this.btnPrint.TabIndex = 0; this.btnPrint.Text = "Print"; this.btnPrint.Click += new System.EventHandler(this.btnPrint_Click); // // oPrintDialog // this.oPrintDialog.AllowSomePages = true; // // PrinterCaps5 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(176, 86); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.btnPrint}); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Name = "PrinterCaps5"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Printer Caps"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new PrinterCaps5()); } private void printDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { PrinterSettings pSettings = new PrinterSettings(); Font printFont = new Font("Arial", 12); //Use the Margins int nTextPosY = e.MarginBounds.Top; int nTextPosX = e.MarginBounds.Left; int nHeight = (int)printFont.GetHeight(e.Graphics); //Height of a printer block int nBlockHeight = 9 * nHeight; if(e.PageSettings.PrinterSettings.PrintRange == PrintRange.SomePages) { while(m_nCurrPage < e.PageSettings.PrinterSettings.FromPage) { //Move printer to next page block m_nCurrPrinter += (int)(e.MarginBounds.Height / nBlockHeight); m_nCurrPage++; if(m_nCurrPrinter > PrinterSettings.InstalledPrinters.Count) return; } if(m_nCurrPage > e.PageSettings.PrinterSettings.ToPage) { //Don"t print anything more return; } } //Print Background Graphic LinearGradientBrush aBrush = new LinearGradientBrush(e.MarginBounds,Color.FromArgb(100,Color.LightBlue), Color.FromArgb(100,Color.Blue),LinearGradientMode.ForwardDiagonal); e.Graphics.FillRectangle(aBrush,e.MarginBounds); //Loop through using indexor now //Start with the previous index in m_nCurrPrinter for(int x = m_nCurrPrinter;x< PrinterSettings.InstalledPrinters.Count; x++)//each(string sPtr in PrinterSettings.InstalledPrinters) { pSettings.PrinterName = PrinterSettings.InstalledPrinters[x]; if(pSettings.IsValid) { //Ensure this printer block can fit on the page if(nTextPosY + nBlockHeight < e.MarginBounds.Bottom) { //Print the caps of the printer e.Graphics.DrawString(PrinterSettings.InstalledPrinters[x], printFont,Brushes.Black, nTextPosX, nTextPosY + 5); e.Graphics.DrawString("Can Duplex: " + pSettings.CanDuplex.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight)); e.Graphics.DrawString("Is Default: " + pSettings.IsDefaultPrinter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*2)); e.Graphics.DrawString("Is Plotter: " + pSettings.IsPlotter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*3)); e.Graphics.DrawString("Landscape Angle: " + pSettings.LandscapeAngle.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*4)); e.Graphics.DrawString("Maximum Copies: " + pSettings.MaximumCopies.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*5)); e.Graphics.DrawString("Maximum Page: " + pSettings.MaximumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*6)); e.Graphics.DrawString("Minimum Page: " + pSettings.MinimumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*7)); e.Graphics.DrawString("Supports Color: " + pSettings.SupportsColor.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*8)); nTextPosY = nTextPosY + ((5 + nHeight*8) + nHeight); //Draw line after each e.Graphics.DrawLine(System.Drawing.Pens.Black,nTextPosX,nTextPosY,e.MarginBounds.Right - 10,nTextPosY); e.Graphics.FillEllipse(System.Drawing.Brushes.Black,e.MarginBounds.Right - 10,nTextPosY-5,10,10); } else { //Could nto fit block on the page - need more pages m_nCurrPrinter = x; e.HasMorePages = true; return; } } } //Last page if we reached here e.HasMorePages = false; m_nCurrPrinter = 0; return; }
private void btnPrint_Click(object sender, System.EventArgs e) { //Set to defaults m_nCurrPrinter = 0; m_nCurrPage = 1; oPrintDialog.Document = printDoc; if (oPrintDialog.ShowDialog() == DialogResult.OK) { try { ppDialog.Document = printDoc; ppDialog.ShowDialog(); } catch(Exception ex) { MessageBox.Show(ex.ToString()); } } } }
}
</source>
Printer Caps 6
<source lang="csharp"> /* Professional Windows GUI Programming Using C# by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury,
Zach Greenvoss, Shripad Kulkarni, Neil Whitlow
Publisher: Peer Information ISBN: 1861007663
- /
using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Printing; using System.Drawing.Drawing2D; namespace PrinterCaps6 {
public class PrinterCaps6 : System.Windows.Forms.Form { //Saved PageSettings Object private PageSettings oPageSettings; private int m_nCurrPrinter; private int m_nCurrPage; private System.Drawing.Printing.PrintDocument printDoc; private System.Windows.Forms.PrintPreviewDialog ppDialog; private System.Windows.Forms.Button btnPrint; private System.Windows.Forms.PrintDialog oPrintDialog; private System.Windows.Forms.PageSetupDialog oPageSetup; private System.Windows.Forms.Button btnSetup; private System.ruponentModel.Container components = null; public PrinterCaps6() { InitializeComponent(); //Create PageSettings object to store page information oPageSettings = new PageSettings(); } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.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() {
// System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(PrinterCaps6));
this.printDoc = new System.Drawing.Printing.PrintDocument(); this.ppDialog = new System.Windows.Forms.PrintPreviewDialog(); this.btnPrint = new System.Windows.Forms.Button(); this.oPrintDialog = new System.Windows.Forms.PrintDialog(); this.oPageSetup = new System.Windows.Forms.PageSetupDialog(); this.btnSetup = new System.Windows.Forms.Button(); this.SuspendLayout(); // // printDoc // this.printDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDoc_PrintPage); // // ppDialog // this.ppDialog.AutoScrollMargin = new System.Drawing.Size(0, 0); this.ppDialog.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.ppDialog.ClientSize = new System.Drawing.Size(400, 300); this.ppDialog.Enabled = true;
// this.ppDialog.Icon = ((System.Drawing.Icon)(resources.GetObject("ppDialog.Icon")));
this.ppDialog.Location = new System.Drawing.Point(326, 19); this.ppDialog.MaximumSize = new System.Drawing.Size(0, 0); this.ppDialog.Name = "ppDialog"; this.ppDialog.Opacity = 1; this.ppDialog.TransparencyKey = System.Drawing.Color.Empty; this.ppDialog.Visible = false; // // btnPrint // this.btnPrint.Location = new System.Drawing.Point(52, 44); this.btnPrint.Name = "btnPrint"; this.btnPrint.TabIndex = 0; this.btnPrint.Text = "Print"; this.btnPrint.Click += new System.EventHandler(this.btnPrint_Click); // // oPrintDialog // this.oPrintDialog.AllowSomePages = true; this.oPrintDialog.PrintToFile = true; // // btnSetup // this.btnSetup.Location = new System.Drawing.Point(52, 8); this.btnSetup.Name = "btnSetup"; this.btnSetup.TabIndex = 1; this.btnSetup.Text = "Page Setup"; this.btnSetup.Click += new System.EventHandler(this.btnSetup_Click); // // PrinterCaps6 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(176, 86); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.btnSetup, this.btnPrint}); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Name = "PrinterCaps6"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Printer Caps"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new PrinterCaps6()); } private void printDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { PrinterSettings pSettings = new PrinterSettings(); Font printFont = new Font("Arial", 12); //Use the Margins int nTextPosY = e.MarginBounds.Top; int nTextPosX = e.MarginBounds.Left; int nHeight = (int)printFont.GetHeight(e.Graphics); //Height of a printer block int nBlockHeight = 9 * nHeight; if(e.PageSettings.PrinterSettings.PrintRange == PrintRange.SomePages) { while(m_nCurrPage < e.PageSettings.PrinterSettings.FromPage) { //Move printer to next page block m_nCurrPrinter += (int)(e.MarginBounds.Height / nBlockHeight); m_nCurrPage++; if(m_nCurrPrinter > PrinterSettings.InstalledPrinters.Count) return; } if(m_nCurrPage > e.PageSettings.PrinterSettings.ToPage) { //Don"t print anything more return; } } //Print Background Graphic LinearGradientBrush aBrush = new LinearGradientBrush(e.MarginBounds,Color.FromArgb(100,Color.LightBlue), Color.FromArgb(100,Color.Blue),LinearGradientMode.ForwardDiagonal); e.Graphics.FillRectangle(aBrush,e.MarginBounds); //Loop through using indexor now //Start with the previous index in m_nCurrPrinter for(int x = m_nCurrPrinter;x< PrinterSettings.InstalledPrinters.Count; x++)//each(string sPtr in PrinterSettings.InstalledPrinters) { pSettings.PrinterName = PrinterSettings.InstalledPrinters[x]; if(pSettings.IsValid) { //Ensure this printer block can fit on the page if(nTextPosY + nBlockHeight < e.MarginBounds.Bottom) { //Print the caps of the printer e.Graphics.DrawString(PrinterSettings.InstalledPrinters[x], printFont,Brushes.Black, nTextPosX, nTextPosY + 5); e.Graphics.DrawString("Can Duplex: " + pSettings.CanDuplex.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight)); e.Graphics.DrawString("Is Default: " + pSettings.IsDefaultPrinter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*2)); e.Graphics.DrawString("Is Plotter: " + pSettings.IsPlotter.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*3)); e.Graphics.DrawString("Landscape Angle: " + pSettings.LandscapeAngle.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*4)); e.Graphics.DrawString("Maximum Copies: " + pSettings.MaximumCopies.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*5)); e.Graphics.DrawString("Maximum Page: " + pSettings.MaximumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*6)); e.Graphics.DrawString("Minimum Page: " + pSettings.MinimumPage.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*7)); e.Graphics.DrawString("Supports Color: " + pSettings.SupportsColor.ToString(), printFont,Brushes.Black, nTextPosX + 10, nTextPosY + (5 + nHeight*8)); nTextPosY = nTextPosY + ((5 + nHeight*8) + nHeight); //Draw line after each e.Graphics.DrawLine(System.Drawing.Pens.Black,nTextPosX,nTextPosY,e.MarginBounds.Right - 10,nTextPosY); e.Graphics.FillEllipse(System.Drawing.Brushes.Black,e.MarginBounds.Right - 10,nTextPosY-5,10,10); } else { //Couldn"t fit block on the page - need more pages m_nCurrPrinter = x; e.HasMorePages = true; return; } } } //Last page if we reached here e.HasMorePages = false; m_nCurrPrinter = 0; return; }
private void btnPrint_Click(object sender, System.EventArgs e) { //Set to defaults m_nCurrPrinter = 0; m_nCurrPage = 1; oPrintDialog.Document = printDoc; if (oPrintDialog.ShowDialog() == DialogResult.OK) { try { //Ensure the correct PrinterSettings object is used oPageSettings.PrinterSettings = printDoc.PrinterSettings; //Assign PageSettings object to all pages printDoc.DefaultPageSettings = oPageSettings; ppDialog.Document = printDoc; ppDialog.ShowDialog(); } catch(Exception ex) { MessageBox.Show(ex.ToString()); } } } private void btnSetup_Click(object sender, System.EventArgs e) { oPageSetup.PageSettings = oPageSettings; if(oPageSetup.ShowDialog() == DialogResult.OK) { oPageSettings = oPageSetup.PageSettings; } } }
}
</source>
Print Events
<source lang="csharp"> /* 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.ruponentModel; 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.ruponentModel.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); } }
}
</source>
Simple Report Printer
<source lang="csharp"> /* Code revised from chapter 7
GDI+ Custom Controls with Visual C# 2005 By Iulian Serban, Dragos Brezoi, Tiberiu Radu, Adam Ward Language English Paperback 272 pages [191mm x 235mm] Release date July 2006 ISBN 1904811604 Sample chapter http://www.packtpub.ru/files/1604_CustomControls_SampleChapter.pdf
For More info on GDI+ Custom Control with Microsoft Visual C# book visit website www.packtpub.ru
- /
using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Printing;
namespace PrintApp {
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Image imageHeader = new Bitmap(50, 50); Graphics img = Graphics.FromImage(imageHeader); img.DrawEllipse(Pens.Black, 0, 0, 45, 45); img.DrawString("LOGO", this.Font, Brushes.Black, new PointF(7, 16)); img.Dispose(); string textDocument; textDocument = ""; for (int i = 0; i < 60; i++) { for (int j = 0; j < i; j++) textDocument += " "; textDocument += "The quick brown fox jumps over the lazy dog\n"; } SimpleReportPrinter printDocument = new SimpleReportPrinter(imageHeader, textDocument, this.Font); printDocument.Print(false); } private System.ruponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.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.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // button1 // this.button1.BackColor = System.Drawing.SystemColors.ActiveCaption; this.button1.Location = new System.Drawing.Point(95, 107); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(100, 30); this.button1.TabIndex = 0; this.button1.Text = "Print"; this.button1.UseVisualStyleBackColor = false; this.button1.Click += new System.EventHandler(this.button1_Click); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion private System.Windows.Forms.Button button1; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } public class TextDispenser { int _start = 0; string _text = null; Font _fnt; public TextDispenser(string text, Font fnt) { _start = 0; _text = text; _fnt = fnt; } public bool DrawText(Graphics target, Graphics measurer, RectangleF r, Brush brsh) { if (r.Height < _fnt.Height) throw new ArgumentException("The rectangle is not tall enough to fit a single line of text inside."); int charsFit = 0; int linesFit = 0; int cut = 0; string temp = _text.Substring(_start); StringFormat format = new StringFormat(StringFormatFlags.FitBlackBox | StringFormatFlags.LineLimit); //measure how much of the string we can fit into the rectangle measurer.MeasureString(temp, _fnt, r.Size, format, out charsFit, out linesFit); cut = BreakText(temp, charsFit); if (cut != charsFit) temp = temp.Substring(0, cut); bool h = true; h &= true; target.DrawString(temp.Trim(" "), _fnt, brsh, r, format); _start += cut; if (_start == _text.Length) { _start = 0; //reset the location so we can repeat the document return true; //finished printing } else return false; } private static int BreakText(string text, int approx) { if (approx == 0) throw new ArgumentException(); if (approx < text.Length) { //are we in the middle of a word? if (char.IsLetterOrDigit(text[approx]) && char.IsLetterOrDigit(text[approx - 1])) { int temp = text.LastIndexOf(" ", approx, approx + 1); if (temp >= 0) return temp; } } return approx; } } public class SimpleReportPrinter { Image _header = null; string _text = null; int _pageNumber = 0; PrintDocument _prtdoc = null; TextDispenser _textDisp = null; public SimpleReportPrinter(Image header, string text, Font fnt) { _header = (Image)(header.Clone()); _text = text; _prtdoc = new PrintDocument(); _prtdoc.PrintPage += new PrintPageEventHandler(_prtdoc_PrintPage); _textDisp = new TextDispenser(_text, fnt); } public void Print(bool hardcopy) { //create a PrintDialog based on the PrintDocument PrintDialog pdlg = new PrintDialog(); pdlg.Document = _prtdoc; //show the PrintDialog if (pdlg.ShowDialog() == DialogResult.OK) { //create a PageSetupDialog based on the PrintDocument and PrintDialog PageSetupDialog psd = new PageSetupDialog(); psd.EnableMetric = true; //Ensure all dialog measurements are in metric psd.Document = pdlg.Document; //show the PageSetupDialog if (psd.ShowDialog() == DialogResult.OK) { //apply the settings of both dialogs _prtdoc.DefaultPageSettings = psd.PageSettings; //decide what action to take if (hardcopy) { //actually print hardcopy _prtdoc.Print(); } else { //preview onscreen instead PrintPreviewDialog prvw = new PrintPreviewDialog(); prvw.Document = _prtdoc; prvw.ShowDialog(); } } } } private void _prtdoc_PrintPage(object sender, PrintPageEventArgs e) { e.Graphics.Clip = new Region(e.MarginBounds); //this method does all our printing work Single x = e.MarginBounds.Left; Single y = e.MarginBounds.Top; //draw the header image if (_pageNumber++ == 0) { e.Graphics.DrawImage(_header, x, y); y += _header.Height + 30; } RectangleF mainTextArea = RectangleF.FromLTRB(x, y, e.MarginBounds.Right, e.MarginBounds.Bottom); //draw the main part of the report if (_textDisp.DrawText(e.Graphics, e.PageSettings.PrinterSettings.CreateMeasurementGraphics(), mainTextArea, Brushes.Black)) { e.HasMorePages = false; //the end has been reached _pageNumber = 0; } else e.HasMorePages = true; //watermark e.Graphics.TranslateTransform(200, 200); e.Graphics.RotateTransform(e.PageSettings.Landscape ? 30 : 60); e.Graphics.DrawString("CONFIDENTIAL", new Font("Courier New", 75, FontStyle.Bold), new SolidBrush(Color.FromArgb(64, Color.Black)), 0, 0); } }
}
</source>
UI Print
<source lang="csharp"> /* GDI+ Programming in C# and VB .NET by Nick Symmonds Publisher: Apress ISBN: 159059035X
- /
using System; using System.Drawing; using System.Drawing.Text; using System.Drawing.Drawing2D; using System.Drawing.Printing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; namespace UIPrint_c {
public class UIPrint : System.Windows.Forms.Form { private PrintPreviewDialog Pv; private PageSetupDialog Ps; private PrintDocument Pd; private PrintDialog Pr; private System.Windows.Forms.MainMenu mainMenu1; private System.Windows.Forms.MenuItem mnuFile; private System.Windows.Forms.MenuItem mnuSetup; private System.Windows.Forms.MenuItem mnuPreview; private System.Windows.Forms.MenuItem mnuPrint; private System.Windows.Forms.Button cmdQuit;
private System.ruponentModel.Container components = null; public UIPrint() { InitializeComponent(); Pv = new PrintPreviewDialog(); Ps = new PageSetupDialog(); Pr = new PrintDialog(); Pd = new PrintDocument(); Pd.DocumentName = "My New Document"; Pv.Document = Pd; Ps.Document = Pd; Pr.Document = Pd; } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.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.mainMenu1 = new System.Windows.Forms.MainMenu(); this.mnuFile = new System.Windows.Forms.MenuItem(); this.mnuSetup = new System.Windows.Forms.MenuItem(); this.mnuPreview = new System.Windows.Forms.MenuItem(); this.mnuPrint = new System.Windows.Forms.MenuItem(); this.cmdQuit = new System.Windows.Forms.Button(); this.SuspendLayout(); // // mainMenu1 // this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.mnuFile}); // // mnuFile // this.mnuFile.Index = 0; this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.mnuSetup, this.mnuPreview, this.mnuPrint}); this.mnuFile.Text = "File"; // // mnuSetup // this.mnuSetup.Index = 0; this.mnuSetup.Text = "Page Setup"; this.mnuSetup.Click += new System.EventHandler(this.mnuSetup_Click); // // mnuPreview // this.mnuPreview.Index = 1; this.mnuPreview.Text = "Print Preview"; this.mnuPreview.Click += new System.EventHandler(this.mnuPreview_Click); // // mnuPrint // this.mnuPrint.Index = 2; this.mnuPrint.Text = "Print"; this.mnuPrint.Click += new System.EventHandler(this.mnuPrint_Click); // // cmdQuit // this.cmdQuit.Location = new System.Drawing.Point(256, 256); this.cmdQuit.Name = "cmdQuit"; this.cmdQuit.Size = new System.Drawing.Size(64, 32); this.cmdQuit.TabIndex = 0; this.cmdQuit.Text = "Quit"; this.cmdQuit.Click += new System.EventHandler(this.cmdQuit_Click); // // UIPrint // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(342, 303); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.cmdQuit}); this.MaximizeBox = false; this.Menu = this.mainMenu1; this.MinimizeBox = false; this.Name = "UIPrint"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "UIPrint"; this.Load += new System.EventHandler(this.UIPrint_Load); this.ResumeLayout(false); } #endregion [STAThread] static void Main() { Application.Run(new UIPrint()); } private void UIPrint_Load(object sender, System.EventArgs e) { Pd.PrintPage += new PrintPageEventHandler(this.pd_Print); } protected override void OnPaint(PaintEventArgs e) { DrawIt(e.Graphics); } private void DrawIt(Graphics G) { G.SmoothingMode = SmoothingMode.AntiAlias; Pen P1 = new Pen(Brushes.Violet, 5); G.DrawString("Test of Print dialog and page setup", new Font("Time New Roman", 16), Brushes.Blue, new Point(5, 5)); G.DrawPie(P1, 10, 10, 150, 150, 28, 57); G.FillEllipse(Brushes.BurlyWood, 10, 200, this.Width-50, 50); } private void pd_Print(object sender, PrintPageEventArgs e) { DrawIt(e.Graphics); } private void mnuSetup_Click(object sender, System.EventArgs e) { Ps.ShowDialog(); Pd.DefaultPageSettings = Ps.PageSettings; Pd.PrinterSettings = Ps.PrinterSettings; } private void mnuPreview_Click(object sender, System.EventArgs e) { Pv.WindowState = FormWindowState.Maximized; Pv.ShowDialog(); } private void mnuPrint_Click(object sender, System.EventArgs e) { if (Pr.ShowDialog() == DialogResult.OK) Pd.Print(); } private void cmdQuit_Click(object sender, System.EventArgs e) { this.Dispose(); } }
}
</source>