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(); } } }
public static void RenderPdf(IList<DEngine> expEngines, string fileName) { /*** no progress form as this requires Application.DoEvents which will kill rendering (cairo/gdi+ at the same time) ***/ WFCairoGraphics dg = WFHelper.MakeCairoPDFGraphics(fileName, 0, 0); dg.Scale(0.75, 0.75); // TODO figure out why this is needed (gak!) foreach (DEngine de in expEngines) { WFHelper.SetCairoPDFSurfaceSize(dg, PageTools.SizetoSizeMM(de.PageSize)); // create cairifyed figures/DEngine DEngine cairoDe = CairifyEngine(de); // print page DPrintViewer dvPrint = new DPrintViewer(); //dvPrint.SetPageSize(de.PageSize); dvPrint.Paint(dg, cairoDe.BackgroundFigure, cairoDe.Figures); WFHelper.ShowCairoPDFPage(dg); } dg.Dispose(); GC.Collect(); // release all the cairo stuff so the pdf gets written? }
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); }
private bool ExportImage(IList<DEngine> expEngines) { bool result = false; FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == DialogResult.OK) { result = true; try { // setup progress form ProgressForm pf = new ProgressForm(); pf.Text = WbLocale.ExportingToImages; pf.Shown += delegate(object s, EventArgs e) { string fileNameTemplate; if (rbPng.Checked) fileNameTemplate = Path.GetFileNameWithoutExtension(docFileName) + "{0}.png"; else fileNameTemplate = Path.GetFileNameWithoutExtension(docFileName) + "{0}.emf"; DPrintViewer dvPrint = new DPrintViewer(); foreach (DEngine de in expEngines) { DBitmap bmp = WFHelper.MakeBitmap((int)de.PageSize.X, (int)de.PageSize.Y); DGraphics dg; if (rbPng.Checked) dg = WFHelper.MakeGraphics(bmp); else dg = new EmfGraphics(new DRect(0, 0, de.PageSize.X, de.PageSize.Y), WorkBookUtils.GetScreenMM(), WorkBookUtils.GetScreenRes()); dvPrint.Paint(dg, de.BackgroundFigure, de.Figures); if (rbPng.Checked) bmp.Save(Path.Combine(fbd.SelectedPath, string.Format(fileNameTemplate, engines.IndexOf(de) + 1))); else ((EmfGraphics)dg).SaveToFile(Path.Combine(fbd.SelectedPath, string.Format(fileNameTemplate, engines.IndexOf(de) + 1))); dg.Dispose(); bmp.Dispose(); } pf.Close(); System.Diagnostics.Process.Start(fbd.SelectedPath); }; pf.ShowDialog(); } catch (Exception e) { result = false; MessageBox.Show(WbLocale.ERROR, e.Message, MessageBoxButtons.OK, MessageBoxIcon.Error); } } return result; }