在asp.net中如何自己编写highcharts图表导出到自己的服务器上来
1.準(zhǔn)備工作:
網(wǎng)上下載highcharts導(dǎo)出的關(guān)鍵dll。
????? 1)、Svg.dll:因?yàn)閔ighcharts的格式其實(shí)就是一個(gè)xml,采用svg的方式畫(huà)圖;
????? 2)、itextsharp.dll:這樣主要是用于處理和提取highcharts圖表內(nèi)的文字以及編碼問(wèn)題;
2.創(chuàng)建一個(gè)簡(jiǎn)單asp.net項(xiàng)目,并把上述兩個(gè)程序集引入到項(xiàng)目中,OK。
3.給出頁(yè)面代碼:
4.服務(wù)器上的代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using System.Text; using System.Drawing.Imaging; using iTextSharp.text.pdf; using iTextSharp.text; using Svg; using System.Xml;namespace HighCharts_Web {public partial class HCExport : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack){//判斷參數(shù)是否正確//type是可以自己指定的導(dǎo)出類型//svg是默認(rèn)傳遞的//filename是可以自己指定的文件名if (Request.Form["type"] != null && Request.Form["svg"] != null && Request.Form["filename"] != null){//獲得相應(yīng)參數(shù)string tType = Request.Form["type"].ToString();string tSvg = Request.Form["svg"].ToString();string tFileName = Request.Form["filename"].ToString();if (tFileName == ""){tFileName = "chart";}//將svg轉(zhuǎn)換為二進(jìn)制流 特別注意了:這里將svg轉(zhuǎn)換成二進(jìn)制流時(shí),一定要選擇正確的編碼格式,//否則,導(dǎo)出來(lái)的圖片中中文有亂碼,如下面的編碼,肯定會(huì)出現(xiàn)亂碼,我們應(yīng)該改成UTF8,才不會(huì)出現(xiàn)亂碼 MemoryStream tData = new MemoryStream(Encoding.ASCII.GetBytes(tSvg));MemoryStream tStream = new MemoryStream();string tTmp = new Random().Next().ToString();string tExt = "";string tTypeString = "";//獲取導(dǎo)出類型switch (tType){case "image/png":tTypeString = "-m image/png";tExt = "png";break;case "image/jpeg":tTypeString = "-m image/jpeg";tExt = "jpg";break;case "application/pdf":tTypeString = "-m application/pdf";tExt = "pdf";break;case "image/svg+xml":tTypeString = "-m image/svg+xml";tExt = "svg";break;}if (tTypeString != ""){string tWidth = Request.Form["width"].ToString();SvgDocument tSvgObj = SvgDocument.Open<SvgDocument>(tData);switch (tExt){case "jpg":tSvgObj.Draw().Save(tStream, ImageFormat.Jpeg);break;case "png":tSvgObj.Draw().Save(tStream, ImageFormat.Png);break;case "pdf":PdfWriter tWriter = null;Document tDocumentPdf = null;try{// First step saving png that would be used in pdf tSvgObj.Draw().Save(tStream, ImageFormat.Png);// Creating pdf documenttDocumentPdf = new Document(new iTextSharp.text.Rectangle((float)tSvgObj.Width, (float)tSvgObj.Height));// setting up margin to full screen imagetDocumentPdf.SetMargins(0.0f, 0.0f, 0.0f, 0.0f);// creating imageiTextSharp.text.Image tGraph = iTextSharp.text.Image.GetInstance(tStream.ToArray());tGraph.ScaleToFit((float)tSvgObj.Width, (float)tSvgObj.Height);tStream = new MemoryStream();// Insert contenttWriter = PdfWriter.GetInstance(tDocumentPdf, tStream);tDocumentPdf.Open();tDocumentPdf.NewPage();tDocumentPdf.Add(tGraph);tDocumentPdf.CloseDocument();}catch (Exception ex){throw ex;}finally{//正確釋放資源 tDocumentPdf.Close();tDocumentPdf.Dispose();tWriter.Close();tWriter.Dispose();tData.Dispose();tData.Close();}break;case "svg":tStream = tData;break;}//保存圖表路徑 可以自己指定tFileName = Server.MapPath("~/Report/") + tFileName + "." + tExt;//將二進(jìn)制流保存為指定路徑下的具體文件 System.IO.File.WriteAllBytes(tFileName, tStream.ToArray());Response.Write("恭喜您,highcharts導(dǎo)出成功,路徑為" + tFileName); }}}}} }5,這樣就可以將圖表下載到服務(wù)器的Report文件夾中了,ok,不謝!
6。著力推薦關(guān)于本文中所解決的問(wèn)題,讓更多的愛(ài)好者都能學(xué)習(xí)到如此經(jīng)典的方式。本文也是借鑒的。
http://www.stepday.com/topic/?594????? http://www.stepday.com/topic/?725
7.自己的一點(diǎn)感悟:
?????? 其實(shí),針對(duì)highcharts中的圖表,瀏覽器中呈現(xiàn)的是圖表,我們大多數(shù)人誤認(rèn)為這是張圖片,現(xiàn)在我想把這種觀念糾正,這圖表不是一張圖片,而是一個(gè)svg文件,文件中是種xml文件,從本文中完全可以體會(huì)到,本文中我們主要是將svg字符串存儲(chǔ)在二進(jìn)制流中(MemoryStream),然后通過(guò)Svgdocument對(duì)象Draw后一png格式存儲(chǔ)中流中,(tSvgObj.Draw().Save(tStream, ImageFormat.Png);),最后,直接寫(xiě)入對(duì)應(yīng)的文件中。
轉(zhuǎn)載于:https://www.cnblogs.com/ysq0908/p/6139287.html
總結(jié)
以上是生活随笔為你收集整理的在asp.net中如何自己编写highcharts图表导出到自己的服务器上来的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 自定义滚动条CSS样式
- 下一篇: asp.net ajax控件工具集 Au