Highcharts的常用属性及导出SVG
做了好几个项目都用到了Highcharts,好用自然不用多说,这里总结一下每次作图经常用的一些配置,方便以后查看。
引入Highcharts非常简单,只需引入对应的js,页面中写入存放表格的div,js中对表格加以配置。
配置说明
下面是Highcharts官方的基础柱状图的实例配置,我将加入常用的配置并加以说明。想直接体验的朋友可以访问这个地址进行表格调试。https://jshare.com.cn/demos/hhhhD8
var chart = Highcharts.chart('container',{
// 设置表格的图例非显示,图例就是说明每个不同颜色柱子代表什么含义,一般项目中会自己定义所以加以隐藏
legend : {
enabled : false
},
// 表格的标题,设置为null为不显示
title : {
text : null
},
// 设置版权信息不显示,就是Highcharts.com.cn行
credits : {
enabled : false
},
// 设置表格右上角的下载和导出按钮不显示
navigation: {
buttonOptions: {
enabled: false
}
},
chart: {
type: 'column',
// 设置表格距离div的内边距,默认是[10,10,15,10]
spacing : [ 0, 0, 0, 0 ],
},
xAxis: {
categories: [
'一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'
],
crosshair: true,
// 不显示x轴文字
labels : {
enabled : false
},
},
yAxis: {
min: 0,
title: {
text: '降雨量 (mm)'
},
lables : {
// 对y轴上显示的文字进行格式化定义,下面的方法是数字超过三位时,用逗号进行间隔,并在最后添加mm
formatter:function(){
return Highcharts.numberFormat(this.value,0,"",",")+"mm";
}
}
},
tooltip: {
// head + 每个 point + footer 拼接成完整的 table
headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
'<td style="padding:0"><b>{point.y:.1f} mm</b></td></tr>',
footerFormat: '</table>',
shared: true,
useHTML: true
},
plotOptions: {
column: {
borderWidth: 0
}
},
series: [{
name: '东京',
data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}, {
name: '纽约',
data: [83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3]
}, {
name: '伦敦',
data: [48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3, 51.2]
}, {
name: '柏林',
data: [42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8, 51.1]
}]
});
以上只是一些基础的配置,更详细的说明可以进入官网进行查看https://api.highcharts.com.cn/highcharts
导出SVG
有这样一个需求,页面有打印pdf的功能,生成pdf的时候需要将表格显示在pdf文件中。大致思路是这样的,点击打印按钮的时候,将表格转成svg的代码,发给后台,后台再将svg转为png格式的图片,从而插入到pdf文件中进行显示。
怎么获得Highcharts的svg代码呢?当然官方也提供了方法,只需导入exporting.js,使用以下方法:
var svg = chart.getSVG();
通过以上方法获取到SVG文件后,发给后台进行使用batik的jar包进行转换(Java端使用Batik将SVG转为PNG),生成png。
这里还有一个问题,就是如果在表格显示后,通过js对表格进行了调整,导出的SVG代码依然是js修改前的代码,也就是说不能导出最终修改后的图表。
这时候就需要动一些歪脑筋了,通过F12可以看到表格的在页面其实就是SVG的代码

那是不是把svg标签中的代码获取到就可以生成想要的图片呢,答案是否定的。因为页面中的svg标签和通过方法获取到的svg还是有区别的,页面中的svg标签中不含有命名空间,具体可参考这篇文章svg命名空间。
<svg xmlns="http://www.w3.org/2000/svg">
<!-- more tags here -->
</svg>
如以上代码中的xmlns,就是这个svg的命名空间,xmlns并不是一个简单的属性,所以不能通过Jquery的attr()方法给强行添加。
我们可以使用另外一种直接的方式
var svg = $("#container .highcharts-container").html().replace(/<svg /, '<svg xmlns:xlink="http://www.w3.org/1999/xlink" ');
这样获取到的svg字符就可以再后台生成想要的图片了。
Highcharts的常用属性及导出SVG的更多相关文章
- SVG DOM常用属性和方法介绍(1)
12.2 SVG DOM常用属性和方法介绍 将以Adobe SVG Viewer提供的属性和方法为准,因为不同解析器对JavaScript以及相关的属性和方法支持的程度不同,有些方法和属性是某个解析 ...
- SVG DOM常用属性和方法介绍
将以Adobe SVG Viewer提供的属性和方法为准,因为不同解析器对JavaScript以及相关的属性和方法支持的程度不同,有些方法和属性是某个解析器所特有的.SVG支持DOM2标准. 12.2 ...
- Jasper_mainReport_excel html pdf 主报表中常用属性
jasper中,excel , html, pdf 一般可以使用相同的主报表和子报表.需要在主报表中添加不同格式对应的属性.导出不同格式的报表,编译器会将相应的属性应用到对应的报表格式中. 常用属性如 ...
- 【Android自学日记】五大布局常用属性
线性布局(LinearLayout)常用属性: android:orientation="vertical"--决定子类控件的排布方式(vertical垂直:horizontal水 ...
- DataGrid中的常用属性
DataGrid中的常用属性 $('#dg').datagrid({ url:'datagrid_data.json', columns:[[ {field:'code',title:'Code',w ...
- Node.js process 模块常用属性和方法
Node.js是常用的Javascript运行环境,本文和大家发分享的主要是Node.js中process 模块的常用属性和方法,希望通过本文的分享,对大家学习Node.js http://www.m ...
- ImageView的常用属性
ImageView的一些常用属性,并且这些属性都有与之对应的getter.setter方法: android:adjustViewBounds:设置ImageView是否调整自己的边界来保持所显示图片 ...
- HTML a标签、4个伪类、常用属性(下载)、锚链接(待扩展:邮件、电话、短信、GPS)
HTML 超链接<a> 1.超链接可以是一个字.一个词.一组词.一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分. 2.当您把鼠标指针移动到网页中的某个链接上时,箭头会 ...
- iOS导航控制器常用函数与navigationBar常用属性
导航控制器常用函数触发时机 当视图控制器的View将要出现时触发 - (void)viewWillAppear:(BOOL)animated 当视图控制器的View已经出现时触发 - (void)vi ...
随机推荐
- 一个 TCP 连接可以发多少个 HTTP 请求?
曾经有这么一道经典面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式. ...
- python+Appium自动化:TouchAction九宫格实战
TouchAction Touch Action包含一系列操作,比如按压.长按.点击.移动.暂停. 使用TochAction需要先导入对应的模块 from appium.webdriver.commo ...
- 上传时excel类型accept的MIMI类型
1.excel文件类型 accept='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/v ...
- echarts自定义折线图横坐标时间间隔踩坑总结
折线图需求:横坐标为时间,要求按一定间隔展示,鼠标移至折线上间隔时间内的数据也可展示 其实很简单的一个配置就可搞定,但在不熟悉echarts配置的情况下,就很懵逼 xAxis: { boundaryG ...
- DX12 开debuggerlayer
https://social.technet.microsoft.com/Forums/azure/en-US/ef10f8eb-fee0-4cde-bb01-52d1db2ea347/win10-1 ...
- TBDR下msaa 在metal vulkan和ogles的解决方案
https://developer.arm.com/solutions/graphics/developer-guides/understanding-render-passes/multi-samp ...
- kickstart批量装机脚本
#!/bin/bash #安装必备的软件 yum -y install dhcp tftp-server tftp xinetd syslinux vsftpd yum -y install *kic ...
- GNS3错误’Could not start Telnet console with command 'Solar-PuTTY.exe‘
这个报错是由于电脑中没有安装Solar-Putty导致的.直接安装一个solar-putty或者putty,然后在gns3上方工具栏点击:edit - preferences - general -c ...
- 题解 [51nod1385] 凑数字
题面 解析 首先设\(n\)有\(l\)位, 那么对于前\(l-1\)位,\(0\)~\(9\)都是要选上的, 而对于最高位上的数\(x\),\(1\)~\(x-1\)也是要选上的. 到这里就有了\( ...
- 阿里OSS Vue上传文件提示The OSS Access Key Id you provided does not exist in our records.解决方法
vue项目 1.安装OSS的Node SDK npm install ali-oss --save 2.参考官方提示https://help.aliyun.com/document_detail/11 ...