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(); } } }
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); }