コード例 #1
0
        // 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);
        }
コード例 #2
0
        // 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);
                }
            }
        }