水晶报告中的MS图表

时间:2011-07-16 14:48:15

标签: crystal-reports charts mschart

是否可以在以适合打印的分辨率呈现的结果报告中包含ms图表asp.net控件的图表图像?

我的网站显示了mschart,我想在我的水晶报告中使用相同的图表,以便客户可以打印它。我不想使用水晶报告图表。

2 个答案:

答案 0 :(得分:2)

我正在做类似的事情 - 使用ms图表创建图表,在网页上呈现它,以及其他html标记(数据表),然后用户可以导出到PDF或Excel。为了做到这一点,并保留相同的图表图像,我的代码将图表保存在服务器上作为.png图像,然后如果用户想要导出页面,我的代码在导出文档中调用该图像(pdf或excel并用标签显示它。

这是将图表保存到服务器的相关代码:

// save the finished image to a folder, so the PDF can retrive it later
v_chart.SaveImage(context.Server.MapPath(String.Concat(@"charts\chartimage_",      v_runtimeReportKey, "_", v_chartID, ".png")));
// output the finished image to the browser
context.Response.Clear();
context.Response.ContentType = "image/png";
// following works fine with IIS 7 (Windows 7, or 2008 Server)
//v_chart.SaveImage(context.Response.OutputStream, ChartImageFormat.Png);
// must use the following for IIS 6 (Windows 2003 Server)
using(MemoryStream v_stream = new MemoryStream()){
   v_chart.SaveImage(v_stream, ChartImageFormat.Png);
   v_stream.WriteTo(context.Response.OutputStream);
}

答案 1 :(得分:1)

当您将MS图表保存为图像时,它总是以96dpi的速度出现,如果您想要打印它,这不是很好 - 应该更像300dpi。

一个简单的解决方法是在调用SaveImage()之前暂时增加图表大小。

var originalWidth = myChart.Width;
var originalHeight = myChart.Height;
myChart.Width *= 3;
myChart.Height *= 3;

myChart.SaveImage("path\to\imageFile", ChartImageFormat.Bmp);

myChart.Width = originalWidth;
myChart.Height = originalHeight;

这导致图像尺寸是原件的3倍。当缩小到其尺寸的1/3时,它将具有96 x 3 = 288dpi,这在打印时看起来更好。