Печать диаграммы в c # - PullRequest
       11

Печать диаграммы в c #

2 голосов
/ 27 октября 2010

Я могу напечатать диаграмму из моего проекта c #, используя:

chart1.Printing.PrintDocument.DocumentName = "Graph of data";

Но возможно ли добавить к этому заголовок?Я надеялся, что название документа достигнет этого, но, видимо, нет!

Ответы [ 2 ]

4 голосов
/ 26 марта 2014

Вы можете распечатать все, что хотите, прямо на странице, а затем вызвать диаграмму 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);
    }

Этот обработчик меню открывает 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();
    }
2 голосов
/ 27 октября 2010

Вот обходное решение вашей проблемы, если вы поместите ChartingControl внутри элемента управления Panel в форме Windows.Затем вы можете распечатать панель, внутри панели вы можете добавить заголовок документа в качестве метки и все, что вы хотите добавить.

Сначала с панели инструментов добавьте элемент управления PrintDocument и назовите его MyPrintDocument

Затем добавьте элемент управления Panel и поместите в него диаграмму.

Убедитесь, что вы импортировали пространство имен System.Drawing, затем вы можете напечатать панель следующим образом.

    Bitmap MyChartPanel = new Bitmap(panel1.Width, panel1.Height);
    panel1.DrawToBitmap(MyChartPanel, new Rectangle(0, 0, panel1.Width, panel1.Height));

    PrintDialog MyPrintDialog = new PrintDialog();

    if (MyPrintDialog.ShowDialog() == DialogResult.OK)
    {
        System.Drawing.Printing.PrinterSettings values;
        values = MyPrintDialog.PrinterSettings;
        MyPrintDialog.Document = MyPrintDocument;
        MyPrintDocument.PrintController = new System.Drawing.Printing.StandardPrintController();
        MyPrintDocument.Print();
    }

    MyPrintDocument.Dispose();

Этот код преобразует панель в Bitmap, а затем печатает, что Bitmap.

Вы можете сжать это в функцию, такую ​​как:

public void PrintPanel(Panel MyPanel)
{
   // Add code from above in here, changing panel1 to MyPanel...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...