.net 下新版highcharts本地导出图片bug处理
最近公司要用到highcharts这个插件来生成图表,所以我花了点时间研究了下。
现在最新的版本是3.0.2,这js插件居多优点就不比多说了,demo官网上也很详细。但是优点不爽的地方是,导出图片这个功能是通过请求官网的服务器地址下载的,这个就有点不爽了,因为很多系统要求的环境是不联网就能使用的,本人英语很挫,开始不知道官网的下载页面,下面会提供第三方的解决办法,自己在Google大神上面找了很久,最后找到了一个外国人写的一Demo,Highcharts-export-module-asp.net-master.zip 。当时,心中窃喜,妈的踏破铁鞋无觅处,得来全不费工夫,果断下载,看效果。
两个地方有点瑕疵。
左上角那东西是什么玩意。
我选择取消Tokyo的导出,居然还是有四条线。
咋办?!不能用。
先试试连官网导出有木有同样的问题,结果官网一切ok.
然后Google下,没有发现有人遇到同样的情况。So…..自己分析。
- 先看看请求的数据是不是一样的,先用本地的导出服务,记录下请求的参数。
- 在把请求改成官网的地址,记录下参数,一对比,一样的。
- 既然参数一样,那就试试不同的情况,先把所有的线都导出,记录参数,然后去掉一根线,导出,记录下参数。
这里发现了内容有些不一样:
所有线导出,在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处理的更多相关文章
- Highcharts 本地导出图片和PDF asp.net mvc版
啰嗦: 现在大家利用Highcharts开发时,有时候会遇到导出的功能问题,但是highcharts默认是链接自己的服务器上进行处理,但是有时候我们会连不上他的服务器,所以我们要让他在我们的服务器上进 ...
- Highcharts 本地导出图片 Java
下载的Highcharts-2.3.5.zip 解压后 有 E:\Highcharts\Highcharts-2.3.5\exporting-server\java 目录 提供了Java实现的导出应用 ...
- Fusioncharts的导出图片訪问官网问题
Fusioncharts3.5使用自带的导出功能,须要訪问官网 问题描写叙述:使用fusioncharts自带的exportchart方法来导出图片的时候.要訪问export.api3.fusionc ...
- highcharts的.net本地导出环境安装记录
由于项目中highcharts需要内网使用,需要本地搭建导出的环境.下面简述下步骤: 1.下载开源的.net导出文件:https://github.com/imclem/Highcharts-expo ...
- highcharts自定义导出文件格式(csv) highcharts的一些使用心得
highcharts是国外的一个图表插件,包括各种数据图形展示,柱形图,线性图等等,是手机端和pc端最好的图表插件之一,相比于百度的echarts更加轻便和易懂.链接http://www.hchart ...
- Asp.net通过模板(.dot/Html)导出Word,同时导出图片
一.Office组件导出Word(服务器配置麻烦) 需要引用Office的DLL,在下文的附件中,不同的Offic版本用的不一样,虽然高级版本可以兼容低级的,不过,还是统一版本最好 贴上核心代码(转载 ...
- hightchart导出图片
通常在使用highchart导出图片pdf等文件时,我们一般直接引入exporting.js即可 执行导出操作则会直接请求highchart服务器,执行生成图片等操作,然后下载到客户端: 但这一切的操 ...
- highchart本地化导出图片
因为项目执行在内容,并且本身自带的功能是想highcharts server写文件然后再下载的,所以 highchart本地化导出图片 就非常须要. 第一步改动export.js 里的URl 在在e ...
- (原创)Java 读取 Highcharts 中的图片
前言:项目中提出一个新需求,就将Highcharts中的图片读取到Excel中.并在前台做下载,当听到这功能,第一想法是需要由后台编写程序,将数据写道图片中. 虽然没做过但是也没觉得太难,毕竟前辈们肯 ...
随机推荐
- JPA快速入门(自用)
该案例为JPA的实体映射案例,将该项目解压导入到myeclipse中即可使用,然后直接使用hibernate即可! 文件地址:files.cnblogs.com/mrwangblog/JPA-Hibe ...
- python笔记7:日期和时间
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示. 时间 ...
- mac版本cornerstone的无限期破解方法【转】
CornerStone是个人非常喜欢的mac上的一款SVN客户端工具,官方提供了14天的免费试用(trail)版本.我们可以在此基础上提供无限期试用版本. 方法一:如果你从来没有安装过这个trail版 ...
- OC推箱子
#include<stdio.h> #include<stdlib.h> int main(void) { char sr;//存储用户输入的指令 //绘制地图 char a[ ...
- Linux系统目录结构以及简单说明
Linux系统目录结构以及简单说明 linux目录图: / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...
- CozyRSS开发记录15-获取和显示RSS内容
CozyRSS开发记录15-获取和显示RSS内容 1.内容列表 我们先给RSSContentFrame增加一个ViewModel,里面和RSS源列表一样,提供一个ObservableCollectio ...
- iOS多播放器封装
今年在做直播业务的时候遇到一些问题,就是在一个套播放器UI中需要多种不同的播放器(AVPlayer.IJKPlayer.AliPlayer)支持,根据ABTest开关来切换具体使用哪种播放器,并且还要 ...
- 统计java中字符串,数组,集合大小(长度)
字符串长度用String.length(); 数组用String[].length; 集合用collection.size();
- C# 解析JSON的几种办法
欲成为海洋大师,必知晓海中每一滴水的真名. 刚开始只是想找一个转换JSON数组的方法,结果在MSDN翻到一大把. 搜索过程中免不了碰到一大堆名词:WCF => DataContract => ...
- JAVA正则表达式中如何匹配反斜杠 \
有时候我们需要匹配反斜杠,你可能会把对应的正则表达式写成 "\\" 然后可能会有如下输出: Exception in thread "main" java.ut ...