示例#1
0
        public void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
        {
            // we do not use the buffers when printing (the printer is probably higher-resolution!)
            Graphics gr   = e.Graphics;
            Page     page = CurrentDocument.Page(m_PrintPageIndex);

            e.PageSettings.Landscape = page.IsLandscape;
            gr.ResetTransform();
            gr.PageUnit = GraphicsUnit.Pixel;                                                    // GraphicsUnit.Millimeter ' it shows 600 DPI which makes the usual scaling conversion for mono impossible

            SizeF printable = e.PageSettings.PrintableArea.Size.MultiplyBy(Geometry.INCH / 100); // in mm.  Apparently e.MarginBounds or e.PageSettings.PrintableArea is in hundredths of an inch  (?)

            if (page.IsLandscape)
            {
                printable = printable.Flip();                 // But sadly e.PageSettings.PrintableArea does not account for orientation
            }
            var pageSize = page.Size;
            // max scale that will fit:
            var scale = Math.Min(printable.Width / pageSize.Width, printable.Height / pageSize.Height);

            if (scale > 0.97f)             // will not fit at full size (allow a bit <1 in case of slight margin issues)
            {
                scale = 1;                 // don't shrink
            }
            else
            {
                pageSize.Width  *= scale;                // update page size for centreing below
                pageSize.Height *= scale;
            }

            gr.ScaleTransform(scale * gr.DpiX / Geometry.INCH, scale * gr.DpiY / Geometry.INCH);
            gr.TranslateTransform(0, page.Size.Height - 1);
            // centre it
            gr.TranslateTransform(scale * (pageSize.Width - pageSize.Width) / 2, scale * (pageSize.Height - pageSize.Height) / 2);
            // No need to take account of the margins if we are centring it anyway
            //gr.TranslateTransform(m_objPage.Margin - INCH * e.PageSettings.HardMarginX / 100, m_objPage.Margin - INCH * e.PageSettings.HardMarginY / 100)
            gr.SmoothingMode     = SmoothingMode.AntiAlias;
            gr.TextRenderingHint = TextRenderingHint.AntiAlias;             // otherwise text on transparent buffer is naff

            using (NetCanvas canvas = new NetCanvas(gr, true))
            {
                page.DrawBackground(canvas, scale * gr.DpiX / Geometry.INCH, page.Paper.PrintBackground, false);
                if (page != CurrentPage)
                {
                    page.BackgroundImage?.Release();                     // avoid overload if document has masses of large pages
                }
                if (e.PageSettings.PrinterSettings.PrintRange == PrintRange.Selection)
                {
                    page.DrawSelected(canvas, null, scale, gr.DpiX / Geometry.INCH, true);
                }
                else
                {
                    page.DrawShapes(canvas, scale, gr.DpiX / Geometry.INCH, null, !PrintMeasures);
                }
            }

            m_PrintPageIndex += 1;
            switch (m_PrintDocument.PrinterSettings.PrintRange)
            {
            case PrintRange.CurrentPage:
            case PrintRange.Selection:
                e.HasMorePages = false;
                break;

            default:
                e.HasMorePages = m_PrintPageIndex + 1 <= m_PrintDocument.PrinterSettings.ToPage;                         // +1 is the conversion from 0-based to 1-based
                break;
            }
        }
示例#2
0
        protected override Bitmap CreateSampleImage2(int size)
        {
            if (CustomRequiresParameter)
            {
                return(Resources.AM.GreyQuestion_32);
            }

            Bitmap bitmap = new Bitmap(32, 32, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            using (Graphics gr = Graphics.FromImage(bitmap))
            {
                using (NetCanvas canvas = new NetCanvas(gr))
                {
                    gr.Clear(Color.Transparent);
                    gr.SmoothingMode = SmoothingMode.AntiAlias;
                    switch (Change)
                    {
                    case Parameters.FillColour:
                        gr.Clear(Color.FromArgb(Value));
                        break;

                    case Parameters.FillPattern:
                        if ((Shape.FillStyleC.Patterns)Value == Shape.FillStyleC.Patterns.Solid)
                        {
                            gr.Clear(Color.Black);
                        }                                 // leave it white
                        else if ((Shape.FillStyleC.Patterns)Value == Shape.FillStyleC.Patterns.Empty)
                        {
                        }
                        else if ((Shape.FillStyleC.Patterns)Value == Shape.FillStyleC.Patterns.Texture)
                        {
                            gr.Clear(Color.Gray);
                            Debug.Fail("Cannot create sample image for Texture pattern");
                        }
                        else
                        {
                            HatchBrush br = new HatchBrush((HatchStyle)Value, Color.Black, Color.Empty);
                            gr.FillRectangle(br, 0, 0, 32, 32);
                            br.Dispose();
                        }
                        break;

                    case Parameters.LineColour:
                        using (Pen pn = new Pen(Color.FromArgb(Value), 2))
                            gr.DrawLine(pn, 1, 1, 30, 30);
                        break;

                    case Parameters.TextColour:
                        using (Font objFont = new Font(FontFamily.GenericSerif, 10))
                            using (SolidBrush br = new SolidBrush(Color.FromArgb(Value)))
                                gr.DrawString("Ab", objFont, br, 2, 10);
                        break;

                    case Parameters.LineWidth:
                        using (Pen pn = new Pen(Color.Black, Value / 100f * gr.DpiX / Geometry.INCH))
                            gr.DrawLine(pn, 1, 1, 30, 30);
                        break;

                    case Parameters.LinePattern:
                        using (Pen pn = new Pen(Color.Black, 2))
                        {
                            pn.DashStyle = (DashStyle)Value;
                            gr.DrawLine(pn, 1, 1, 30, 30);
                        }
                        break;

                    case Parameters.TextAlignment:
                        switch ((StringAlignment)Value)
                        {
                        case StringAlignment.Near: return((Bitmap)GUIUtilities.RM.GetObject("TextLeft"));

                        case StringAlignment.Center: return((Bitmap)GUIUtilities.RM.GetObject("TextCentre"));

                        case StringAlignment.Far: return((Bitmap)GUIUtilities.RM.GetObject("TextRight"));

                        default:
                            return(null);
                        }

                    case Parameters.TextVerticalAlignment:
                        switch ((StringAlignment)Value)
                        {
                        case StringAlignment.Near: return((Bitmap)GUIUtilities.RM.GetObject("TextTop"));

                        case StringAlignment.Center: return((Bitmap)GUIUtilities.RM.GetObject("TextMiddle"));

                        case StringAlignment.Far: return((Bitmap)GUIUtilities.RM.GetObject("TextBottom"));
                        }
                        break;

                    case Parameters.ArrowheadEndSize:
                    case Parameters.ArrowheadStartSize:
                        DrawArrowhead(canvas, Lined.ArrowheadC.Styles.SimpleSolid, Value);
                        break;

                    case Parameters.ArrowheadEndType:
                    case Parameters.ArrowheadStartType:
                        DrawArrowhead(canvas, (Lined.ArrowheadC.Styles)Value, Lined.ArrowheadC.DEFAULTSIZE);
                        break;

                    default:
                        gr.Clear(Color.Gray);
                        Debug.Fail("Unexpected parameter in CreateParameterSampleImage: " + Change);
                        break;
                    }
                }
            }

            return(bitmap);
        }