// // System.Drawing.PrintDocument.cs // // Author: // Dennis Hayes (dennish@Raytek.com) // Herve Poussineau (hpoussineau@fr.st) // // (C) 2002 Ximian, Inc // using System; namespace System.Drawing.Printing { /// /// Summary description for PrintDocument. /// public class PrintDocument : System.ComponentModel.Component { private PageSettings defaultpagesettings; private PrinterSettings printersettings; private PrintController printcontroller; private string documentname; #if !(NET_1_0) private bool originAtMargins = false; // .NET V1.1 Beta #endif public PrintDocument() { documentname = "document"; //offical default. defaultpagesettings = new PageSettings(); // use default values of default printer printersettings = new PrinterSettings(); // use default values printcontroller = new StandardPrintController(); } // properties public PageSettings DefaultPageSettings{ get{ return defaultpagesettings; } set{ defaultpagesettings = value; } } /// /// Name of the document, not the file! /// public string DocumentName{ get{ return documentname; } set{ documentname = value; } } public PrintController PrintController{ get{ return printcontroller; } set{ printcontroller = value; } } public PrinterSettings PrinterSettings{ get{ return printersettings; } set{ printersettings = value; } } #if !(NET_1_0) public bool OriginAtMargins{// .NET V1.1 Beta get{ return originAtMargins; } set{ originAtMargins = value; } } #endif // methods public void Print(){ PrintEventArgs printArgs = new PrintEventArgs(); this.OnBeginPrint(printArgs); if (printArgs.Cancel) return; PrintController.OnStartPrint(this, printArgs); if (printArgs.Cancel) return; // while there is more pages PrintPageEventArgs printPageArgs; do { PageSettings pageSettings = DefaultPageSettings.Clone() as PageSettings; this.OnQueryPageSettings(new QueryPageSettingsEventArgs(pageSettings)); printPageArgs = new PrintPageEventArgs( null, pageSettings.Bounds, new Rectangle(0, 0, pageSettings.PaperSize.Width, pageSettings.PaperSize.Height), pageSettings); Graphics g = PrintController.OnStartPage(this, printPageArgs); // assign Graphics in printPageArgs printPageArgs.SetGraphics(g); if (!printPageArgs.Cancel) this.OnPrintPage(printPageArgs); PrintController.OnEndPage(this, printPageArgs); if (printPageArgs.Cancel) break; } while (printPageArgs.HasMorePages); this.OnEndPrint(printArgs); PrintController.OnEndPrint(this, printArgs); } public override string ToString(){ return "[PrintDocument " + this.DocumentName + "]"; } // events protected virtual void OnBeginPrint(PrintEventArgs e){ //fire the event if (BeginPrint != null) BeginPrint(this, e); } protected virtual void OnEndPrint(PrintEventArgs e){ //fire the event if (EndPrint != null) EndPrint(this, e); } protected virtual void OnPrintPage(PrintPageEventArgs e){ //fire the event if (PrintPage != null) PrintPage(this, e); } protected virtual void OnQueryPageSettings(QueryPageSettingsEventArgs e){ //fire the event if (QuerypageSettings != null) QuerypageSettings(this, e); } public event PrintEventHandler BeginPrint; public event PrintEventHandler EndPrint; public event PrintPageEventHandler PrintPage; public event QueryPageSettingsEventHandler QuerypageSettings; } }