最近有个导出需求需要将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参数就可以了。
分享到:
相关推荐
javaHighcharts 导出图表引用的资源包 import org.apache.batik.transcoder.Transcoder; import org.apache.batik.transcoder.TranscoderException; import org.apache.batik.transcoder.TranscoderInput; import...
这里面有highcharts开发用到相关包,如:batik-xml.jar,batik-svggen.jar,batik-codec.jar,等等包,整理后的完整包,都在这里。
Batik是使用svg格式图片来实现各种功能的应用程序以及Applet提供的一个基于java的工具包。 通过Batik,你可以在JAVA可以使用的地方操作SVG文档,您还可以在你的应用程序使用Batik模块来生成 , 处理和转码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....
NULL 博文链接:https://narutolby.iteye.com/blog/1605814
Batik库
Batik 是为想使用 svg 格式图片来实现各种功能的应用程序和 Applet 提供的一个基于 java 的工具包。 工程创建的目的是为开发者提供一系列可以结合或单独使用来支持特殊的 svg 解决方案的核心模块。模块主要有 ...
Batik 是为想使用 svg 格式图片来实现各种功能的应用程序和 Applet 提供的一个基于 java 的工具包。
batik-1.7 batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7batik-1.7
Batik是为想使用svg格式图片来实现各种功能的应用程序和Applet提供的一个基于java的工具包。 工程创建的目的是为开发者提供一系列可以结合或单独使用来支持特殊的svg解决方案的核心模块。模块主要有SVGParser,...
batik可以实现JAVA画SVG图,也可以将后台生成图表转换成png格式图片。配合iText等打印技术,可以实现word打印各类分析图表的功能。
batik-anim-1.7.jar batik-awt-util-1.7.jar batik-bridge-1.7.jar batik-codec-1.7.jar batik-css-1.7.jar batik-dom-1.7.jar batik-ext-1.7.jar batik-gvt-1.7.jar batik-js-1.7.jar batik-parser-1.7.jar batik-...
处理highcharts导出图片出现中文乱码所用到的jar包
在java环境下,用Batik加载显示svg图片
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-...
java+opencv+batik 绘制Koch雪花并保存为SVG格式图片,感兴趣的同学可以下载看看效果~
包括batik-all-1.6.jar、fop-0.20.5.jar、pdf-transcoder.jar、xerces-1.2.3.jar等相关jar包
batik-all.jar
batik-all-1.7.jar包含了batik-1.7.jar