// methods public void Print() { PrintEventArgs printArgs = new PrintEventArgs(); this.OnBeginPrint(printArgs); if (printArgs.Cancel) { return; } PrintController.OnStartPrint(this, printArgs); if (printArgs.Cancel) { return; } Graphics g = null; if (printArgs.GraphicsContext != null) { g = Graphics.FromHdc(printArgs.GraphicsContext.Hdc); printArgs.GraphicsContext.Graphics = g; } // while there are more pages PrintPageEventArgs printPageArgs; do { QueryPageSettingsEventArgs queryPageSettingsArgs = new QueryPageSettingsEventArgs( DefaultPageSettings.Clone() as PageSettings); OnQueryPageSettings(queryPageSettingsArgs); PageSettings pageSettings = queryPageSettingsArgs.PageSettings; printPageArgs = new PrintPageEventArgs( g, pageSettings.Bounds, new Rectangle(0, 0, pageSettings.PaperSize.Width, pageSettings.PaperSize.Height), pageSettings); // TODO: We should create a graphics context for each page since they can have diferent paper // size, orientation, etc. We use a single graphic for now to keep Cairo using a single PDF file. printPageArgs.GraphicsContext = printArgs.GraphicsContext; Graphics pg = PrintController.OnStartPage(this, printPageArgs); // assign Graphics in printPageArgs printPageArgs.SetGraphics(pg); if (!printPageArgs.Cancel) { this.OnPrintPage(printPageArgs); } PrintController.OnEndPage(this, printPageArgs); if (printPageArgs.Cancel) { break; } } while (printPageArgs.HasMorePages); this.OnEndPrint(printArgs); PrintController.OnEndPrint(this, printArgs); }
// Print the document. public void Print() { PrintController controller = PrintController; PrintEventArgs printArgs; QueryPageSettingsEventArgs queryArgs; PrintPageEventArgs pageArgs; Graphics graphics; // Begin the printing process. printArgs = new PrintEventArgs(); OnBeginPrint(printArgs); #if CONFIG_COMPONENT_MODEL if (printArgs.Cancel) { return; } #endif controller.OnStartPrint(this, printArgs); // Wrap the rest in a "try" block so that the controller // will be properly shut down if an exception occurs. try { queryArgs = new QueryPageSettingsEventArgs ((PageSettings)(DefaultPageSettings.Clone())); do { // Query the page settings for the next page. OnQueryPageSettings(queryArgs); #if CONFIG_COMPONENT_MODEL if (queryArgs.Cancel) { break; } #endif // Create the page argument structure. pageArgs = new PrintPageEventArgs (queryArgs.PageSettings); // Get the graphics object to use to draw the page. graphics = controller.OnStartPage(this, pageArgs); pageArgs.graphics = graphics; // Print the page. try { OnPrintPage(pageArgs); controller.OnEndPage(this, pageArgs); } finally { graphics.Dispose(); } }while(!(pageArgs.Cancel) && pageArgs.HasMorePages); } finally { try { OnEndPrint(printArgs); } finally { controller.OnEndPrint(this, printArgs); } } }