Beispiel #1
0
 private void actPrint_Execute(object sender, EventArgs e)
 {
     if (engines.Count > 0)
     {
         PrintDialog pf = new PrintDialog();
         pf.UseEXDialog = true;
         pf.AllowSelection = false;
         if (engines.Count > 1)
         {
             pf.AllowCurrentPage = true;
             pf.AllowSomePages = true;
             pf.PrinterSettings.MinimumPage = 1;
             pf.PrinterSettings.MaximumPage = engines.Count;
             pf.PrinterSettings.FromPage = 1;
             pf.PrinterSettings.ToPage = engines.Count;
         }
         if (pf.ShowDialog() == DialogResult.OK)
         {
             DPrintViewer dvPrint = new DPrintViewer();
             // page iteration vars
             IEnumerator<DEngine> engineEnumerator = engines.GetEnumerator();
             engineEnumerator.MoveNext();
             int pageIdx = pf.PrinterSettings.FromPage - 1;
             // print document settings
             PrintDocument pd = new PrintDocument();
             pd.PrinterSettings = pf.PrinterSettings;
             pd.DocumentName = Path.GetFileNameWithoutExtension(fileName);
             pd.PrintPage += delegate(object s2, PrintPageEventArgs e2)
             {
                 // set DEngine/page to print and whether we have more pages to go
                 DEngine de = null;
                 switch (pd.PrinterSettings.PrintRange)
                 {
                     case PrintRange.CurrentPage:
                         e2.HasMorePages = false;
                         de = this.de;
                         break;
                     case PrintRange.SomePages:
                         de = engines[pageIdx];
                         pageIdx += 1;
                         e2.HasMorePages = pageIdx < pd.PrinterSettings.ToPage;
                         break;
                     default: // PrintRange.AllPages
                         de = engineEnumerator.Current;
                         e2.HasMorePages = engineEnumerator.MoveNext();
                         break;
                 }
                 // print the page using the e2.Graphics GDI+ object
                 dvPrint.SetPageSize(de.PageSize);
                 WFPrintSettings dps = new WFPrintSettings(e2.PageSettings);
                 DGraphics dg = WFHelper.MakePrintGraphics(e2.Graphics);
                 dvPrint.Paint(dg, dps, de.BackgroundFigure, de.Figures);
                 dg.Dispose();
             };
             // call print operation
             pd.Print();
         }
     }
 }
Beispiel #2
0
 void miPrint_ButtonPressEvent(object o, ButtonPressEventArgs args)
 {
     PrintOperation po = new PrintOperation();
     po.BeginPrint += delegate(object o2, BeginPrintArgs args2)
     {
         po.NPages = 1;
     };
     po.DrawPage += delegate(object o2, DrawPageArgs args2)
     {
         GTKGraphics dg = new GTKGraphics(CairoHelper.GetContext(args2.Context));
         DPrintViewer dvPrint = new DPrintViewer();
         dvPrint.SetPageSize(de.PageSize);
         GTKPrintSettings dps =
             new GTKPrintSettings(args2.Context.DpiX, args2.Context.DpiY, args2.Context.PageSetup);
         dvPrint.Paint(dg, dps, de.BackgroundFigure, de.Figures);
     };
     po.Run(PrintOperationAction.PrintDialog, this);
 }