如何使用RadPrintPreview打印面板的内容?

时间:2014-08-26 11:11:56

标签: c# winforms printing telerik preview

我希望用telerik的RadPrintPreview打印面板的内容,但是当我宣布RadPrintDocument时,我不能在稍后与面板关联! 这是我的代码:

private void doc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{

        Bitmap bmp = new Bitmap(radPanel2.Width, radPanel2.Height, radPanel2.CreateGraphics());
        radPanel2.DrawToBitmap(bmp, new Rectangle(0, 0, radPanel2.Width, radPanel2.Height));

        RectangleF bounds = e.PageSettings.PrintableArea;
        e.Graphics.DrawImage(bmp, bounds.Left, bounds.Top, radPanel2.Width, radPanel2.Height);

}
private void btn_Imression_Click(object sender, EventArgs e)
{

        System.Drawing.Printing.PrintDocument doc = new System.Drawing.Printing.PrintDocument();
        doc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(doc_PrintPage);
        RadPrintPreviewDialog PrintSettings = new RadPrintPreviewDialog();

        PrintSettings.Document = doc;
        PageSettings pgsetting = new PageSettings();

        if (PrintSettings.ShowDialog() == DialogResult.OK)
            doc.Print();
}

并感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

为了打印用于WinForms控件的Telerik UI,您应该使用framework功能中的嵌入式功能,即RadPrintDocument,它允许您打印实现 IPrintable 界面。以下是RadPanel的工作方式:

    RadPanel panel = new RadPanel();
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        InitializeComponent();

        panel.Dock = DockStyle.Fill;
        panel.BackColor = Color.Red;
        panel.Parent = this;

        RadButton b = new RadButton();
        b.Text = "button1";
        panel.Controls.Add(b);

        RadButton b2 = new RadButton();
        b2.Text = "button1";
        b2.Location = new Point(400, 400);
        panel.Controls.Add(b2);


    }

    private class PanelPrinter : IPrintable
    {
        private RadPanel panel;

        public PanelPrinter(RadPanel panel)
        {
            this.panel = panel;
        }

        public int BeginPrint(RadPrintDocument sender, PrintEventArgs args)
        {
            return 1;
        }

        public bool EndPrint(RadPrintDocument sender, PrintEventArgs args)
        {
            return false;
        }

        public Form GetSettingsDialog(RadPrintDocument document)
        {
            return null;
        }

        public bool PrintPage(int pageNumber, RadPrintDocument sender, PrintPageEventArgs args)
        {
            float scale = Math.Min((float)args.MarginBounds.Width / panel.Size.Width, (float)args.MarginBounds.Height / panel.Size.Height);

            Bitmap panelBmp = new Bitmap(this.panel.Width, this.panel.Height);
            this.panel.DrawToBitmap(panelBmp, this.panel.Bounds);

            Matrix saveMatrix = args.Graphics.Transform;
            args.Graphics.ScaleTransform(scale, scale);
            args.Graphics.DrawImage(panelBmp, args.MarginBounds.Location);
            args.Graphics.Transform = saveMatrix;

            return false;
        }
    }

    private void radButton1_Click(object sender, EventArgs e)
    {
        RadPrintDocument document = new RadPrintDocument();
        document.AssociatedObject = new PanelPrinter(this.panel);
        RadPrintPreviewDialog dialog = new RadPrintPreviewDialog(document);

        dialog.ShowDialog();
    }