在打印之前调整MSChart的大小以适合Pagesize

时间:2012-10-21 11:46:18

标签: c# winforms printing charts

我正在努力弄清楚如何在打印时让MSChart填满整个页面。有人可以告诉我为什么下面的代码不起作用和/或建议另一种方法。我为自己的无知道歉,但到目前为止我所做的所有打印都是通过Crystal和其他报告框架完成的,因此我通常不必直接使用PrintDialog和PrintPreviewDialog。提前谢谢。

// Printing Code
Size pageSize = new Size(this.Chart.Printing.PrintDocument.DefaultPageSettings.PaperSize.Width, this.Chart.Printing.PrintDocument.DefaultPageSettings.PaperSize.Height);
this.Chart.Size = pageSize;

// This properly previews my chart but, it does not fill up the page                    
this.Chart.Printing.PrintPreview();

1 个答案:

答案 0 :(得分:3)

好的,所以我终于想出了如何完成我想要做的事情。归结起来,我不了解如何将PrintDocument与Graphics对象一起使用。我用来完成任务的代码如下。我真的希望这有助于某人。此外,我强烈推荐MSFT图表示例代码。事实证明,在创建这些图表时,这对我来说非常宝贵。链接是:http://archive.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=4418

    public void PrintPreviewIncompleteJobsByStatus()
    {
        // Set new print document with custom page printing event handler
        chart.Printing.PrintDocument = new PrintDocument();
        chart.Printing.PrintDocument.PrintPage += new PrintPageEventHandler(ChartGenericFormat_PrintPage);

        chart.Printing.PrintDocument.DefaultPageSettings.Landscape = true;

        // Print preview chart
        chart.Printing.PrintPreview();
    }

    private void ChartGenericFormat_PrintPage(object sender, PrintPageEventArgs ev)
    {
        // Calculate first chart position rectangle
        Rectangle chartPosition = new Rectangle(ev.MarginBounds.X, ev.MarginBounds.Y, ev.MarginBounds.Width, ev.MarginBounds.Height);

        // Draw chart on the printer graphics
        chart.Printing.PrintPaint(ev.Graphics, chartPosition);

    }