在asp.net中如何自己编写highcharts图表导出到自己的服务器上来

1.准备工作:
网上下载highcharts导出的关键dll。
      1)、Svg.dll:因为highcharts的格式其实就是一个xml,采用svg的方式画图;
      2)、itextsharp.dll:这样主要是用于处理和提取highcharts图表内的文字以及编码问题;

2.创建一个简单asp.net项目,并把上述两个程序集引入到项目中,OK。
3.给出页面代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="HCExport.aspx.cs" Inherits="HighCharts_Web.HCExport" ValidateRequest="false"  %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="Scripts/highcharts/jquery-1.8.3.min.js"></script>
    <script type="text/javascript" src="Scripts/highcharts/highcharts.js"></script>
    <script type="text/javascript" src="Scripts/highcharts/exporting.js"></script>
    <script type="text/javascript">
        var chart;
        $(function () {
            $(document).ready(function () {
                chart = new Highcharts.Chart({
                    chart: {
                        renderTo: ‘container‘,
                        plotBackgroundColor: null,
                        plotBorderWidth: null,
                        plotShadow: false
                    },
                    title: {
                        text: ‘Browser market shares at a specific website, 2010‘
                    },
                    tooltip: {
                        pointFormat: ‘{series.name}: <b>{point.percentage}%</b>‘,
                        percentageDecimals: 1
                    },
                    plotOptions: {
                        pie: {
                            allowPointSelect: true,
                            cursor: ‘pointer‘,
                            dataLabels: {
                                enabled: true,
                                color: ‘#000000‘,
                                connectorColor: ‘#000000‘,
                                formatter: function () {
                                    return ‘<b>‘ + this.point.name + ‘</b>: ‘ + this.percentage + ‘ %‘;
                                }
                            },
                            showInLegend: true //是否显示图例
                        }
                    },
                    exporting: {
                        filename: ‘mychart‘,
                        url: "/HCExport.aspx"
                    },
                    series: [{
                        type: ‘pie‘,
                        name: ‘Browser share‘,
                        data: [
                    [‘Firefox‘, 45.0],
                    [‘IE‘, 26.8],
                    {
                        name: ‘Chrome‘,
                        y: 12.8,
                        sliced: true,
                        selected: true
                    },
                    [‘Safari‘, 8.5],
                    [‘Opera‘, 6.2],
                    [‘Others‘, 0.7]
                ]
                    }]
                });
            });

        });
    </script>
</head>
<body>
    <div id="container" style="min-width: 400px; height: 400px; margin: 0 auto">
    </div>
    <div style="text-align:center; width:100%;">
        <input type="button" value="保存图表至服务器(默认保存为PNG格式可自行调整)" onclick="SaveChart()" />
    </div>
    <script type="text/javascript" language="javascript">
        //也可以直接用异步提交方式,这样可以防止页面刷新
        function ExportChart() {
            $.ajax(
            {
                type: ‘POST‘, //post方式异步提交
                async: false, //同步提交
                url: "/highcharts_export.aspx", //导出图表的服务页面地址
                dataType: "json", //传递方式为json
                //几个重要的参数 如果这里不传递width的话,需要修改导出服务页面内的Request.Form["width"].ToString() 把这句代码注释掉即可
                data: { type: ‘image/png‘, filename: ‘MyChartTest‘, width: 400, svg: chart.getSVG() },
                success: function (msg) {
                    alert("图表导出成功!");
                },
                error: function (errorMsg) {
                    if (errorMsg.statusText == "OK") {
                        alert("图表导出成功!");
                    } else {
                        alert("图表导出失败!");
                    }
                }
            }
            );
        }
        //保存图表
        function SaveChart() {
            chart.exportChart({
                type: ‘image/png‘,
                filename: ‘mychart‘
            });
        }
    </script>
</body>

</html>

4.服务器上的代码:

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)
            {
                //判断参数是否正确
                //type是可以自己指定的导出类型
                //svg是默认传递的
                //filename是可以自己指定的文件名
                if (Request.Form["type"] != null && Request.Form["svg"] != null && Request.Form["filename"] != null)
                {
                    //获得相应参数
                    string tType = Request.Form["type"].ToString();
                    string tSvg = Request.Form["svg"].ToString();
                    string tFileName = Request.Form["filename"].ToString();
                    if (tFileName == "")
                    {
                        tFileName = "chart";
                    }
                    //将svg转换为二进制流
                    MemoryStream tData = new MemoryStream(Encoding.ASCII.GetBytes(tSvg));
                    MemoryStream tStream = new MemoryStream();

                    string tTmp = new Random().Next().ToString();

                    string tExt = "";
                    string tTypeString = "";
                    //获取导出类型
                    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);
                                //DELETING SVG FILE
                                //if (File.Exists(Server.MapPath(null) + ConfigurationManager.AppSettings["EXPORT_TEMP_FOLDER"].ToString() + tSvgOuputFile))
                                //{
                                //    File.Delete(Server.MapPath(null) + ConfigurationManager.AppSettings["EXPORT_TEMP_FOLDER"].ToString() + tSvgOuputFile);
                                //}
                                break;
                            case "png":
                                tSvgObj.Draw().Save(tStream, ImageFormat.Png);
                                ////DELETING SVG FILE
                                //if (File.Exists(Server.MapPath(null) + ConfigurationManager.AppSettings["EXPORT_TEMP_FOLDER"].ToString() + tSvgOuputFile))
                                //{
                                //    File.Delete(Server.MapPath(null) + ConfigurationManager.AppSettings["EXPORT_TEMP_FOLDER"].ToString() + tSvgOuputFile);
                                //}
                                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 document
                                    tDocumentPdf = new Document(new iTextSharp.text.Rectangle((float)tSvgObj.Width, (float)tSvgObj.Height));
                                    // setting up margin to full screen image
                                    tDocumentPdf.SetMargins(0.0f, 0.0f, 0.0f, 0.0f);
                                    // creating image
                                    iTextSharp.text.Image tGraph = iTextSharp.text.Image.GetInstance(tStream.ToArray());
                                    tGraph.ScaleToFit((float)tSvgObj.Width, (float)tSvgObj.Height);

                                    tStream = new MemoryStream();

                                    // Insert content
                                    tWriter = PdfWriter.GetInstance(tDocumentPdf, tStream);
                                    tDocumentPdf.Open();
                                    tDocumentPdf.NewPage();
                                    tDocumentPdf.Add(tGraph);
                                    tDocumentPdf.CloseDocument();

                                    //// deleting png
                                    //if (File.Exists(Server.MapPath(null) + ConfigurationManager.AppSettings["EXPORT_TEMP_FOLDER"].ToString() + tOutputFile.Substring(0, tOutputFile.LastIndexOf(".")) + ".png"))
                                    //{
                                    //    File.Delete(Server.MapPath(null) + ConfigurationManager.AppSettings["EXPORT_TEMP_FOLDER"].ToString() + tOutputFile.Substring(0, tOutputFile.LastIndexOf(".")) + ".png");
                                    //}

                                    //// deleting svg
                                    //if (File.Exists(Server.MapPath(null) + ConfigurationManager.AppSettings["EXPORT_TEMP_FOLDER"].ToString() + tSvgOuputFile))
                                    //{
                                    //    File.Delete(Server.MapPath(null) + ConfigurationManager.AppSettings["EXPORT_TEMP_FOLDER"].ToString() + tSvgOuputFile);
                                    //}

                                }
                                catch (Exception ex)
                                {
                                    throw ex;

                                }
                                finally
                                {
                                    //正确释放资源
                                    tDocumentPdf.Close();
                                    tDocumentPdf.Dispose();
                                    tWriter.Close();
                                    tWriter.Dispose();
                                    tData.Dispose();
                                    tData.Close();

                                }
                                break;
                            case "svg":
                                tStream = tData;
                                break;
                        }
                        //if (File.Exists(Server.MapPath(null) + ConfigurationManager.AppSettings["EXPORT_TEMP_FOLDER"].ToString() + tOutputFile))
                        //{

                        //Putting session to be able to delete file in temp directory
                        //Session["sFileToTransmit_highcharts_export"] = File.ReadAllBytes(Server.MapPath(null) + ConfigurationManager.AppSettings["EXPORT_TEMP_FOLDER"].ToString() + tOutputFile);
                        //First step deleting disk file;
                        //File.Delete(Server.MapPath(null) + ConfigurationManager.AppSettings["EXPORT_TEMP_FOLDER"].ToString() + tOutputFile);

                        //保存图表路径 可以自己指定
                        tFileName = Server.MapPath("~/Report/") + tFileName + "." + tExt;
                        Response.ClearContent();
                        Response.ClearHeaders();
                        Response.ContentType = tType;
                        //Response.AppendHeader("Content-Disposition", "attachment; filename=" + tFileName + "." + tExt + "");
                        //将二进制流保存为指定路径下的具体文件
                        System.IO.File.WriteAllBytes(tFileName, tStream.ToArray());
                        //Response.BinaryWrite(tStream.ToArray());
                        Response.Write("恭喜您,highcharts导出成功,路径为" + tFileName);
                        Response.End();
                        //}
                    }
                }
            }
        }
    }
}

5,这样就可以将图表下载到服务器的Report文件夹中了,ok,不谢!

6。着力推荐关于本文中所解决的问题,让更多的爱好者都能学习到如此经典的方式。本文也是借鉴的。

http://www.stepday.com/topic/?594      http://www.stepday.com/topic/?725

时间: 2024-10-29 19:11:23

在asp.net中如何自己编写highcharts图表导出到自己的服务器上来的相关文章

Asp.net中利用NPOI组件快速导入导出Execl数据

相信很多童鞋都开发过Execl的导入导出功能,最近产品中无论是后台数据分析的需要,还是前端满足用户管理的方便,都有Execl导入导出的维护需求产生. 以前做这个功能,如果是web,利用HttpContext.Current.Response.ContentType ="application/ms-excel";就可以导出html数据表格到execl中,这种方法的问题就是编码格式的兼容性太差,用Mac OS之类的 office打开直接乱码给你看.或者是调用office的COM组件,或宏

highCharts图表入门简介

一.Highcharts简介 Highcharts:功能强大.开源.美观.图表丰富.兼容绝大多数浏览器的纯js图表库 Highcharts是一款纯javascript编写的图表库,能够很简单便捷的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.曲线图.面积图.柱状图.饼图.散点图等多达18种不同类型的图表,可以满足你对Web图表的任何需求 ! 二.Highcharts的构造 三.名词解释 英文名 中文名 描述 lang 语言文字对象 所有Highcharts文字相

ASP.NET中常用的优化性能的方法

1. 数据库访问性能优化  数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响.系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求. 连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能.因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完

ASP.NET中Cookie跨域的问题及解决代码

ASP.NET中Cookie跨域的问题及解决代码 http://www.liyumei.net.cn/post/share18.html Cookies揭秘  http://www.cnblogs.com/zhangziqiu/archive/2009/08/06/cookies-javascript-aspnet.html 最近在项目开发中遇到一个很棘手的问题,一个用户在顶级域名登录后,跳转到自己所拥有的二级域名下管理二级网站时,cookie丢失了,一直找解决办法找了整整两天,百度谷歌一大堆,

ASP.NET中引用dll“找不到指定模块&quot;的完美解决办法 z

DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息.DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称.DllImport的定义如下: [AttributeUsage(AttributeTargets.Method)] public class DllImportAttribute: System.Attribute { public DllImportAttribute

ASP.NET中利用Application和Session统计在线人数、历史访问量

先来简单说一下ASP.NET中的Application和Session 下图是我们非常熟悉的Web应用程序的结构: 在这张图中,Web服务器中运行的Web应用程序就是我们所说的Application,每个客户端与Web服务器之间建立的连接就可以看做是一个Session.比如现在服务器端运行的是一个论坛系统,那么现在这个正运行在服务器端的论坛系统的软件就可以看做Application,而每个在线的用户与之建立的连接就相当于一个Session. 那么很容易就会理解,Application是共享的,相

在 ASP.NET 中创建数据访问和业务逻辑层(转)

.NET Framework 4 当在 ASP.NET 中处理数据时,可从使用通用软件模式中受益.其中一种模式是将数据访问代码与控制数据访问或提供其他业务规则的业务逻辑代码分开.在此模式中,这两个层均与表示层分离.表示层由网站用户有权查看或更改数据的页面组成. ASP.NET 可通过多种方式提供数据访问.业务逻辑和表示形式之间的分离.例如,数据源模型(包括 LinqDataSource 和 ObjectDataSource 等服务器控件)可将表示层与数据访问代码和业务逻辑分离. 另一种模式是将数

Asp.net中的web.config配置

目录 Asp.net中的web.config配置... 1 一. 配置文件保存位置... 2 二. 配置文件加载顺序... 2 三. 配置文件节点介绍... 3 1. . 3 2. . 5 3. . 5 4. . 6 . 11 四. 针对配置文件的一些编程操作... 11 1. 运行时进行配置文件的修改... 11 2. 配置节点的加密... 12 web.config是asp.net中保存配置信息(比如数据库连接字符串等)的重要文件.它是基于xml的文本文件方式放在Web应用程序的任何目录中,

充分发挥异步在 ASP.NET 中的强大优势

作者:Brij Bhushan Mishra 最近几年,异步编程受到极大关注,主要是出于两个关键原因:首先,它有助于提供更好的用户体验,因为不会阻塞 UI 线程,避免了处理结束前出现 UI 界面挂起.其次,它有助于大幅扩展系统,而且无需添加额外硬件. 但是,编写合适的异步代码来管理线程本身是项乏味的工作.虽然如此,其巨大好处让许多新旧技术纷纷开始使用异步编程.微软自发布了 .NET 4.0以后也对其投入颇多,随后在 .NET 4.5中引入了 async 和 await 关键字,使异步编程变得前所