最近公司要用到highcharts这个插件来生成图表,所以我花了点时间研究了下。

现在最新的版本是3.0.2,这js插件居多优点就不比多说了,demo官网上也很详细。但是优点不爽的地方是,导出图片这个功能是通过请求官网的服务器地址下载的,这个就有点不爽了,因为很多系统要求的环境是不联网就能使用的,本人英语很挫,开始不知道官网的下载页面,下面会提供第三方的解决办法,自己在Google大神上面找了很久,最后找到了一个外国人写的一Demo,Highcharts-export-module-asp.net-master.zip 。当时,心中窃喜,妈的踏破铁鞋无觅处,得来全不费工夫,果断下载,看效果。

两个地方有点瑕疵。

左上角那东西是什么玩意。

我选择取消Tokyo的导出,居然还是有四条线。

咋办?!不能用。

先试试连官网导出有木有同样的问题,结果官网一切ok.

然后Google下,没有发现有人遇到同样的情况。So…..自己分析。

  1. 先看看请求的数据是不是一样的,先用本地的导出服务,记录下请求的参数。
  2. 在把请求改成官网的地址,记录下参数,一对比,一样的。
  3. 既然参数一样,那就试试不同的情况,先把所有的线都导出,记录参数,然后去掉一根线,导出,记录下参数。

这里发现了内容有些不一样:

所有线导出,在svg这里xml里,有个 class="highcharts-series-group"的g 节点下面的子节点g 的属性 visibility="visible",而去掉一根线的话,这个值是hidden,ok这里的问题找到了,第三方的Demo对这个属性没有做区分处理。

还有一个bug,经分析得知,那是属性class="highcharts-tooltip"的g节点,这个分析没有其他办法,只有一个个节点去删,然后保存看效果。

OK!!!

所有问题都已找到,下面要做的无非就是对xml做筛选,然后remove掉这几个特殊属性的节点,代码如下:

在Tek4.Highcharts.Exporting. Exporter下的CreateSvgDocument

方法中增加如下代码:

 XmlDocument xml = new XmlDocument();

             xml.LoadXml(this.Svg);

             XmlNodeList nodeListAllg = xml.GetElementsByTagName("g");

             Dictionary<int, XmlNode[,]> dic = new Dictionary<int, XmlNode[,]>();

             int i = ;

             foreach (XmlNode xNod in nodeListAllg)

             {

                 i++;

                 XmlNode xmlvisibility = xNod.Attributes.GetNamedItem("class");

                 if (xmlvisibility != null && xmlvisibility.Value == "highcharts-series-group")

                 {

                     foreach (XmlNode xNod2 in xNod.ChildNodes)

                     {

                         i++;

                         XmlNode xmlvisibility1 = xNod2.Attributes.GetNamedItem("visibility");

                         if (xmlvisibility1 != null && xmlvisibility1.Value == "hidden")

                         {

                             XmlNode[,] xmln = new XmlNode[, ];

                             xmln[, ] = xNod;

                             xmln[, ] = xNod2;

                             dic.Add(i, xmln);

                         }

                     }

                 }

                 else if (xmlvisibility != null && xmlvisibility.Value == "highcharts-tooltip")

                 {

                     XmlNode[,] xmln = new XmlNode[, ];

                     xmln[, ] = xml.FirstChild;

                     xmln[, ] = xNod;

                     dic.Add(i, xmln);

                 }

             }

             foreach (KeyValuePair<int, XmlNode[,]> a in dic) {

                 a.Value[, ].RemoveChild(a.Value[, ]);

             }

             this.Svg = xml.OuterXml;

经测试,ok.

不知道还有没有其他办法解决,如果有,请告之。

刚开始研究highcharts 不知道支不支持在服务端传数据实体,直接在服务的生成图片。望大神赐教。

.net 下新版highcharts本地导出图片bug处理的更多相关文章

  1. Highcharts 本地导出图片和PDF asp.net mvc版

    啰嗦: 现在大家利用Highcharts开发时,有时候会遇到导出的功能问题,但是highcharts默认是链接自己的服务器上进行处理,但是有时候我们会连不上他的服务器,所以我们要让他在我们的服务器上进 ...

  2. Highcharts 本地导出图片 Java

    下载的Highcharts-2.3.5.zip 解压后 有 E:\Highcharts\Highcharts-2.3.5\exporting-server\java 目录 提供了Java实现的导出应用 ...

  3. Fusioncharts的导出图片訪问官网问题

    Fusioncharts3.5使用自带的导出功能,须要訪问官网 问题描写叙述:使用fusioncharts自带的exportchart方法来导出图片的时候.要訪问export.api3.fusionc ...

  4. highcharts的.net本地导出环境安装记录

    由于项目中highcharts需要内网使用,需要本地搭建导出的环境.下面简述下步骤: 1.下载开源的.net导出文件:https://github.com/imclem/Highcharts-expo ...

  5. highcharts自定义导出文件格式(csv) highcharts的一些使用心得

    highcharts是国外的一个图表插件,包括各种数据图形展示,柱形图,线性图等等,是手机端和pc端最好的图表插件之一,相比于百度的echarts更加轻便和易懂.链接http://www.hchart ...

  6. Asp.net通过模板(.dot/Html)导出Word,同时导出图片

    一.Office组件导出Word(服务器配置麻烦) 需要引用Office的DLL,在下文的附件中,不同的Offic版本用的不一样,虽然高级版本可以兼容低级的,不过,还是统一版本最好 贴上核心代码(转载 ...

  7. hightchart导出图片

    通常在使用highchart导出图片pdf等文件时,我们一般直接引入exporting.js即可 执行导出操作则会直接请求highchart服务器,执行生成图片等操作,然后下载到客户端: 但这一切的操 ...

  8. highchart本地化导出图片

    因为项目执行在内容,并且本身自带的功能是想highcharts  server写文件然后再下载的,所以 highchart本地化导出图片 就非常须要. 第一步改动export.js 里的URl 在在e ...

  9. (原创)Java 读取 Highcharts 中的图片

    前言:项目中提出一个新需求,就将Highcharts中的图片读取到Excel中.并在前台做下载,当听到这功能,第一想法是需要由后台编写程序,将数据写道图片中. 虽然没做过但是也没觉得太难,毕竟前辈们肯 ...

随机推荐

  1. 从APP跳转到WI-FI

    之前以为,苹果不支持直接从应用跳到系统设置里的WiFi界面.后来发现,这个小功能是可以实现的,而且实现起来并不麻烦.让我们一起来看看吧! 需求 从应用跳到系统设置里的WiFi界面有这个需求存在吗?答案 ...

  2. SQL中TOP,LIMIT,ROWNUM的用法

    SQL SERVER/MS Access的Select Top的用法: Select TOP number|percent table_columname FROM tablename MySQL/O ...

  3. Mac OS X上搭建伪分布式CDH版本Hadoop开发环境

    最近在研究数据挖掘相关的东西,在本地 Mac 环境搭建了一套伪分布式的 hadoop 开发环境,采用CDH发行版本,省时省心. 参考来源 How-to: Install CDH on Mac OSX ...

  4. java web系统中时间比sql server中的日期少2天的解决办法

    系统环境 jdk:1.7 数据库:sql server 2008 问题描述 升级1.7之后查询出来的日期就比数据库中的少2天,降回1.6版本的jdk就正常了. 问题原因及解决办法 国内网站有很多不靠谱 ...

  5. C语言的一些小知识

    注:本文讨论的"C语言"为GNU C,而非ANSI C 标准库 语法 switch语句中的case关键词可以放在任何地方 switch (a) { case 1:; if (b== ...

  6. Javascript原型继承 __proto__

    Javascript继承是通过原型链继承的 原型链是依赖__proto__而不是prototype var animal = function(){}; var dog = function(){}; ...

  7. MsSQLserver中修改字段值系统自动生成的脚本

    主要参考一下脚本的实现思路: ①创建临时表 ②创建临时表 ③向临时表插入数据 ④删除原表 ⑤临时表改名 /* 为了防止任何可能出现的数据丢失问题,您应该先仔细检查此脚本,然后再在数据库设计器的上下文之 ...

  8. 如何卸载重装docker?

    http://blog.csdn.net/yangzhenping/article/details/43671843

  9. iOS SQLite3的使用

    1.创建可修改的数据库文件 //应用包内的内容是不可写的,所以需要把应用包内的数据库拷贝一个副本到资源路径去 - (void)createEditableDatabase{ BOOL success; ...

  10. iis下搭建通过phpstudy集成的环境,phpmyadmin导入数据库无法应解决办法

    本人非常喜欢phpstudy的集成php+mysql环境,一键搞定,但是不知道为什么搭建的phpmyadmin的数据库管理器,无法上传,点击无反应 发现上传数据的界面有点不同 正常情况下是这样的: 非 ...