C# 用c语言打印图表#
我可以使用以下工具打印c#项目中的图表:C# 用c语言打印图表#,c#,printing,charts,C#,Printing,Charts,我可以使用以下工具打印c#项目中的图表: chart1.Printing.PrintDocument.DocumentName = "Graph of data"; 但是有没有可能给它加上一个标题呢?我希望文档名能实现这一点,但显然不行 如果您将图表控件放在Windows窗体上的面板控件中,这里有一个解决问题的解决方案。然后可以打印面板,在面板内可以添加文档标题作为标签以及任何其他要添加的内容 首先从工具箱中添加一个PrintDocument控件,并将其称为MyPrintDocument 然后
chart1.Printing.PrintDocument.DocumentName = "Graph of data";
但是有没有可能给它加上一个标题呢?我希望文档名能实现这一点,但显然不行 如果您将
图表控件
放在Windows窗体上的面板
控件中,这里有一个解决问题的解决方案。然后可以打印面板,在面板内可以添加文档标题作为标签以及任何其他要添加的内容
首先从工具箱中添加一个PrintDocument
控件,并将其称为MyPrintDocument
然后添加一个面板
控件并将图表放入其中
确保导入了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();
此代码将面板转换为位图
,然后打印该位图
您可以将其压缩为如下函数:
public void PrintPanel(Panel MyPanel)
{
// Add code from above in here, changing panel1 to MyPanel...
}
您可以将任何需要的内容直接打印到页面,然后调用图表PrintPaint()。请注意,如果不将页面单位切换为像素,图表缩放就会变得混乱
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()
您使用的是什么图表组件?它是针对.net 3.5SP1的Microsoft图表控件,但是如果它有很大的不同,我可以使用.net 4:非常聪明!我将试一试。。谢谢。让我知道它是否适合你,我没有完全测试它,因为我没有打印机!如果要求打印时程序未全屏显示,则会导致缩放图表时出现一些问题。所以我可能会坚持使用内置的打印功能。但是,您的解决方案让我找到了一种方法—捕获PrintPage事件并在顶部手动绘制字符串。现在的问题是理解为什么利润率不是他们说的那样,所以它不会在图表中间写。马克:你们有并没有找到更好的方法来处理这个问题[若程序并没有全屏显示,那个么用比例表?]并没有。这是很久以前的事了,但我认为选择的答案就是我使用的解决方案。
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();
}