コード例 #1
0
ファイル: MainForm.cs プロジェクト: djpnewton/ddraw
 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();
         }
     }
 }
コード例 #2
0
ファイル: WorkBookUtils.cs プロジェクト: djpnewton/ddraw
        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?
        }
コード例 #3
0
ファイル: MainWindow.cs プロジェクト: djpnewton/ddraw
 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);
 }
コード例 #4
0
ファイル: ExportForm.cs プロジェクト: djpnewton/ddraw
 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;
 }