最近有个导出需求需要将highchart的图片和数据报表一起生成。
折腾了几天,终于搞定。
1、首先你需要安装JAVA环境。不需要设置环境变量什么的。
2、下载相关的batik jar包,这个我下载了好多次都是错误的。附件里面有我整理好的。
3、调用官方写的PHP程序,我整理成一个函数了。
function svgToImg($type, $svg, $filename){
clearFile(SAVE_PATH);//删除过期文件
ini_set('magic_quotes_gpc', 'off');
$svg = (string) $svg;
$filename = (string) $filename;
// prepare variables
if (!$filename or !preg_match('/^[A-Za-z0-9\-_ ]+$/', $filename)) {
$filename = 'chart';
}
if (get_magic_quotes_gpc()) {
$svg = stripslashes($svg);
}
// check for malicious attack in SVG
if(strpos($svg,"<!ENTITY") !== false || strpos($svg,"<!DOCTYPE") !== false){
exit("Execution is stopped, the posted SVG could contain code for a malicious attack");
}
$tempName = md5(rand());
// allow no other than predefined types
if ($type == 'image/png') {
$typeString = '-m image/png';
$ext = 'png';
} elseif ($type == 'image/jpeg') {
$typeString = '-m image/jpeg';
$ext = 'jpg';
} elseif ($type == 'application/pdf') {
$typeString = '-m application/pdf';
$ext = 'pdf';
} elseif ($type == 'image/svg+xml') {
$ext = 'svg';
} else { // prevent fallthrough from global variables
$ext = 'txt';
}
$outfile = SAVE_PATH.$tempName.'.'.$ext;
if (isset($typeString)) {
// size
$width = '';
if ($_POST['width']) {
$width = (int)$_POST['width'];
if ($width) $width = "-w $width";
}
// generate the temporary file
if (!file_put_contents(SAVE_PATH."$tempName.svg", $svg)) {
die("Couldn't create temporary file. Check that the directory permissions for
the /temp directory are set to 777.");
}
if(IS_WIN){
$output = shell_exec("java -jar ". BATIK_PATH ." $typeString -d $outfile $width ".SAVE_PATH."$tempName.svg");
}else{
$output = shell_exec("/usr/local/jdk1.8.0_66/bin/java -jar ". BATIK_PATH ." $typeString -d $outfile $width ".SAVE_PATH."$tempName.svg");
}
// catch error
if (!is_file($outfile)) {
echo "<pre>$output</pre>";
echo "Error while converting SVG. ";
}
else {
return $outfile;
}
} else if ($ext == 'svg') {
header("Content-Disposition: attachment; filename=\"$filename.$ext\"");
header("Content-Type: $type");
echo $svg;
} else {
echo "Invalid type";
}
}
文件保存到本地,然后就可以随便搞了。
你要是实在嫌安装JAVA环境麻烦,可以直接模拟提交请求官方的导出地址。然后会返回一个图片名称,你可以下载下来,服务器会保存30个小时,具体可以参考
http://www.highcharts.com/docs/export-module/export-module-overview
http://jsfiddle.net/6h8o16g0/
你只要按他的格式传递给他SVG参数就可以了。
分享到:
相关推荐
本话题主要涉及两个关键工具:Batik和iText,它们分别用于SVG到图片的转换和图片插入PDF的操作。让我们详细了解一下这两个工具及其使用方法。 首先,Batik是Apache软件基金会开发的一个开源项目,它是一个基于Java...
这些Batik库与Highcharts的结合,使得开发者可以更方便地实现SVG图表的生成、编辑和导出功能。例如,用户可能需要将网页上的Highcharts图表以高质量的SVG格式保存或打印,这时 Batik的工具就能提供这样的能力。 ...
### highcharts本地导出图片_服务端代码 #### 概述 Highcharts 是一款非常流行的JavaScript图表库,它提供了一套完整的API以及丰富的图表样式,适用于各种数据可视化需求。Highcharts 支持将图表导出为不同的格式,...
javaHighcharts 导出图表引用的资源包 import org.apache.batik.transcoder.Transcoder; import org.apache.batik.transcoder.TranscoderException; import org.apache.batik.transcoder.TranscoderInput; import...
2. **batik-all-1.14.jar**:这是Batik的核心库,包含了所有必需的组件,包括SVG解析器、DOM实现、CSS引擎、Rasterizer和Transcoder等。1.14版本意味着它是 Batik的较新版本,提供了更稳定和功能丰富的SVG支持。 3....
Batik是使用svg格式图片来实现各种功能的应用程序以及Applet提供的一个基于java的工具包。 通过Batik,你可以在JAVA可以使用的地方操作SVG文档,您还可以在你的应用程序使用Batik模块来生成 , 处理和转码SVG图像。...
标题中的“highChart控件”指的是Highcharts,一个流行的JavaScript图表库,用于在网页上创建交互式的图表。Highcharts以其丰富的图表类型、良好的性能和易用性受到开发者的青睐。它支持各种图表类型,包括折线图、...
### Batik的主要功能 1. **SVG解析和生成**:Batik提供了一个SVG解析器,能够读取SVG文件并将其转化为Java对象模型。同时,它也支持将这个对象模型重新渲染回SVG文件,实现了SVG的读写能力。 2. **SVG渲染引擎**:...
`SVGApplication.java`很可能是一个示例程序,展示了如何在Java客户端程序中利用Batik库加载并显示SVG图片。在这个程序中,开发者可能首先会导入必要的Batik库,然后创建一个`SVGSVGElement`对象来表示SVG文档的根...
Batik是为想使用svg格式图片来实现各种功能的应用程序和Applet提供的一个基于java的工具包, 包括:batik-all-1.11.jar,batik-anim-1.11.jar,batik-codec-1.11.jar,batik-constants-1.11.jar,batik-svgbrowser-1.11....
Batik是Apache软件基金会的一个开源项目,它提供了一个完整的SVG工具集,包括解析、渲染、转换等多种功能。 本文将详细介绍如何使用Batik进行SVG文件的操作,并基于实际项目经验分享其基本使用方法。 1. **安装与...
batik-anim batik-awt-util batik-bridge batik batik-codec batik-css batik-dom batik-ext batik-extension batik-gui-util batik-gvt batik-parser batik-rasterizer batik-script batik-svg-dom batik-...
Batik 是为想使用 svg 格式图片来实现各种功能的应用程序和 Applet 提供的一个基于 java 的工具包。 工程创建的目的是为开发者提供一系列可以结合或单独使用来支持特殊的 svg 解决方案的核心模块。模块主要有 ...
通过利用Batik,开发者可以轻松地在Java应用程序中集成SVG功能,例如创建动态图形、数据可视化、图标库等。此外,由于SVG是开放标准,因此使用Batik开发的应用程序具有跨平台兼容性和长期的可维护性。对于需要处理...
本范例代码主要展示了如何利用JSP和Servlet实现图片上传、月历制作以及水印输出的功能,这对于理解Web开发中的文件操作和图像处理具有重要的学习价值。 首先,我们要了解JSP与Servlet的关系。JSP是一种基于Java的...
1. **依赖引入**:为了实现滑块验证,我们需要一些图形处理库,如Java的Java Advanced Imaging (JAI) 或者 Apache Batik。你可以通过Maven或Gradle将这些依赖添加到你的项目中。 2. **滑块图片生成**:创建一个服务...
3. **SVG DOM实现**: Batik提供了完整的SVG DOM API实现,允许通过编程方式创建、修改和操作SVG图形。 4. **SVG生成器(SVG Generator)**: Batik可以将非SVG图形(如Swing组件或Java2D绘制)转换为SVG,这对于...
在开发中,这些jar包通常需要一起添加到项目的类路径中,以便充分利用Batik和其他相关工具的功能。例如,如果你需要从SVG生成PDF,你可能需要使用FOP、pdf-transcoder.jar和 Batik-all-1.6.jar。而xerces-1.2.3.jar...
总之,AmCharts的图片导出功能是通过前端和后端的协同工作来实现的,前端负责捕获用户操作和图表渲染,后端则处理数据转换和存储。`ChartImageExporter.java`作为后端的一部分,提供了将图表数据转化为可下载图片的...