2011-07-16 138 views
0

在適合打印的分辨率中呈現的水晶報表中是否可以包含ms圖表asp.net控件的圖表圖像?水晶報表中的MS圖表

我的網站顯示一個mschart,我想在我的水晶報告中顯示相同的圖表,以便客戶端可以打印它。我不想使用水晶報表圖表。

回答

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); 
} 
+0

我在考慮做類似的事情,謝謝。你知道印刷質量的任何內容,或者如果有辦法將PNG保存爲更高的分辨率? – Jeroen

+0

關於IIS的事情真棒黑客。當我使用MSCharts作爲處理程序時,它對我有效。 – iMatoria

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×3 = 288dpi,這在打印時看起來更好。

+0

如果我理解正確,它實際上增加了圖像的dpi? – Jeroen

+0

不完全。在代碼輸出的圖像中,dpi(每英寸點數)保持不變 - 圖像只有3倍大。 –