在c#中打印图表

Mar*_*ark 2 c# printing charts

我可以使用以下命令从我的 C# 项目打印图表:

chart1.Printing.PrintDocument.DocumentName = "Graph of data";
Run Code Online (Sandbox Code Playgroud)

但是可以为此添加一个标题吗?我希望文档名称能够实现这一点,但显然不能!

Jim*_*ill 5

您可以将任何想要的内容直接打印到页面上,然后调用图表 PrintPaint()。请注意,如果您不将 PageUnit 切换为 Pixels,图表缩放会变得混乱。

void PrintChart(object sender, PrintPageEventArgs ev)
    {
        using (var f = new System.Drawing.Font("Arial", 10))
        {
            var size = ev.Graphics.MeasureString(Text, f);
            ev.Graphics.DrawString("Whatever text you want", f, Brushes.Black, ev.PageBounds.X + (ev.PageBounds.Width - size.Width) / 2, ev.PageBounds.Y);
        }

        //Note, the chart printing code wants to print in pixels.
        Rectangle marginBounds = ev.MarginBounds;
        if (ev.Graphics.PageUnit != GraphicsUnit.Pixel)
        {
            ev.Graphics.PageUnit = GraphicsUnit.Pixel;
            marginBounds.X = (int)(marginBounds.X * (ev.Graphics.DpiX / 100f));
            marginBounds.Y = (int)(marginBounds.Y * (ev.Graphics.DpiY / 100f));
            marginBounds.Width = (int)(marginBounds.Width * (ev.Graphics.DpiX / 100f));
            marginBounds.Height = (int)(marginBounds.Height * (ev.Graphics.DpiY / 100f));
        }

        chart1.Printing.PrintPaint(ev.Graphics, marginBounds);
    }
Run Code Online (Sandbox Code Playgroud)

该菜单处理程序打开一个 PrintDialog()。如果您不需要对话框,您可以直接调用pd.Print().

  private void printToolStripMenuItem_Click(object sender, EventArgs e)
    {
        var pd = new System.Drawing.Printing.PrintDocument();
        pd.PrintPage += new PrintPageEventHandler(PrintChart);

        PrintDialog pdi = new PrintDialog();
        pdi.Document = pd;
        if (pdi.ShowDialog() == DialogResult.OK)
            pdi.Document.Print();
    }
Run Code Online (Sandbox Code Playgroud)