导出服务器原理解析

Highcharts图表导出(或下载)本质上是将SVG代码转换为不同文件格式的过程,用到的工具是batik,所以所谓导出服务器,只不过是调用batik,将SVG代码转换并下载。下图说明此过程

<ignore_js_op style="word-wrap: break-word;">  
图1-Highcharts导出服务器实现过程

所以配置导出服务器,关键是学习如何调用batik。

有image/png、image/jpeg、image/tiff、application/pdf可选
一、SVG
SVG即可缩放矢量图形,标准由W3C制定。Highcharts图表在现代浏览器上都是以SVG形式展现。下图为用浏览器调试工具查看图表内容

<ignore_js_op style="word-wrap: break-word;">  
图2-Highcharts在页面上展现形式

如何获取Highcharts的SVG代码
通过调用Highcharts提供的getSVG()函数,即可获取图表的SVG代码,实例代码如下

[JavaScript] 纯文本查看 复制代码
1
2
var chart = $( '#container' ).highcharts();
var svg = chart.getSVG();

其结果为:

<ignore_js_op style="word-wrap: break-word;">  
图3-获取Highcharts图表的SVG代码

二、Batik
Batik是将SVG转换为常见图形文件的工具,其开发语言是Java。
Batik官网: http://xmlgraphics.apache.org/batik/

1、Batik下载
通过  http://mirrors.cnnic.cn/apache/xmlgraphics/batik/下载batik-1.7.zip  ,可以得到全部的jar包。

2、Batik使用(通过cmd命令测试)
1)新建test目录,如D:\\test\
2)复制Batik所需的jar包,分别是batik-1.7.zip里的batik-rasterizer.jar及lib目录
3)获取任意图表的SVG代码,并保存为 test.svg,保存过程中请保证test.svg文件的编码为utf-8,否则会出错。(获取SVG代码的方法请参考上文)
    检测SVG文件可用的方法是用浏览器打开,如下图所示

<ignore_js_op style="word-wrap: break-word;">  
图4-浏览器打开.svg文件

此时,test目录的文件结构为:(所有文件在后面提供下载)

<ignore_js_op style="word-wrap: break-word;">  
图5-测试目录文件结构

4)cd到test目录,执行java -jar batik-rasterizer.jar-m image/png test.svg,如图

<ignore_js_op style="word-wrap: break-word;">
图6-测试命令及结果

此时test目录就会生成test.png

<ignore_js_op style="word-wrap: break-word;">  
图7-测试成功生成PNG文件

测试成功!
同样的,运行相应的命令即可实现将SVG转换为JPG、PDF文件。下面说明执行java - jar  batik-rasterizer.jar命令的参数

3、Batik参数
上述执行命令java -jar batik-rasterizer.jar -m image/png test.svg等用到的参数命令都可以在文档中查到,主要用到的参数如下

参数 含义及取值
-d 指定生成文件的路径或文件名,不设置则生成在当前目录下
-m 指定转换类型,有image/png、image/jpeg、image/tiff、application/pdf可选
-w 指定生成文件宽度
-h 指定生成文件高度
-font-family 指定字体

更多参数请参考 http://xmlgraphics.apache.org/batik/tools/rasterizer.html

三、动态语言调用Batik
1、PHP调用Batik
PHP通过exec函数调用系统命令,从而调用Batik,命令和cmd一样,其关键代码如下:

[PHP] 纯文本查看 复制代码
1
2
define ( 'BATIK_PATH' , 'batik-rasterizer.jar' );
$output = shell_exec( "java -jar " . BATIK_PATH . " $typeString -d $outfile $width temp/$tempName.svg" );

PHP配置导出服务器过程详见 《 Highcharts导出服务器配置——PHP版

2、JAVA调用Batik
Java通过调用org.apache.batik.apps.rasterizer.SVGConverter类提供的方法即可实现图像转换,本站将详细说明Java配置导出服务器的过程。

3、ASP.net调用Batik
Asp.Net调用Batik的方法和PHP类似,通过调用系统命令形式。

四、资源下载
此次测试所用到的所有文件已打包并提供下载。
百度网盘: http://pan.baidu.com/s/1i3spVVJ

备注:

出现乱码可能原因:

1.字符编码

2.操作系统是否有中文库

Batik - 将svg转换成其他格式图片或PDF - [导出服务器配置] 导出服务器原理解析的更多相关文章

  1. FFMpeg笔记(一) 使用FFmpeg将任意格式图片转换成任意格式图片

    void SrcToDest(char* pSrc, char* pDest,unsigned int nSrcWidth, unsigned int nSrcHeight, AVPixelForma ...

  2. 如何将.jpg图片 转换成.eps 格式图片

    在使用latex写作论文的时候,需要插入一些图片,但是往往有些图片不是eps格式的.虽然网上有如何插入jpg格式的图片方法,但是经过我实验后发现都不太管用.最后找到一个比较靠谱的方法,使用latx本身 ...

  3. centos下 将(jgp、png)图片转换成webp格式

    由于项目要求需要将jpg.png类型的图片  转换成webp格式,最开始使用了php gd类库里 imagewebp 方法实现,结果发现转换成的webp格式文件会偶尔出现空白内容的情况.像创建了一个透 ...

  4. JAVA:借用OpenOffice将上传的Word文档转换成Html格式

    为什么会想起来将上传的word文档转换成html格式呢?设想,如果一个系统需要发布在页面的文章都是来自word文档,一般会执行下面的流程:使用word打开文档,Ctrl+A,进入发布文章页面,Ctrl ...

  5. OpenOffice Word文档转换成Html格式

    为什么会想起来将上传的word文档转换成html格式呢?设想,如果一个系统需要发布在页面的文章都是来自word文档,一般会执行下面的流程:使用word打开文档,Ctrl+A,进入发布文章页面,Ctrl ...

  6. 实现同时将一批.bmp文件转换成.mat格式

    %% 功能:实现同时对一批.bmp文件的转换成.mat格式PicFormat = {'*.bmp','Bitmap image (*.bmp)';... '*.jpg','JPEG image (*. ...

  7. asp.net dataTable转换成Json格式

    /// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...

  8. [jquery]将当前时间转换成yyyymmdd格式

    如题: function nowtime(){//将当前时间转换成yyyymmdd格式 var mydate = new Date(); var str = "" + mydate ...

  9. [转] 将DOS格式文本文件转换成UNIX格式

    点击此处阅读原文 用途说明 dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter).DOS下的文本文 ...

随机推荐

  1. 获取DLL的文件路径以及调用DLL的文件路径

    如何在DLL中,获取DLL本身的路径以及调用DLL的文件的路径呢?主要通过GetModuleFileName(HMODULEhModule,LPTSTR lpFilename,DWORD nSize) ...

  2. MegaCli监控RAID磁盘健康信息

    首先有必要先介绍一下有关RAID卡的使用,有关Cache问题也有个人理解:生产系统上的物理机磁盘配置大多都是RAID5,之前会经常性的遇到磁盘IO在某个时间极度的跟不上节奏,稍微写入量,磁盘utils ...

  3. 移动设备日期选择插件(基于JQUERY)

    上周花了2个小时写的一个日期选择插件,比较适合移动端的设备.先看个效果图吧.如果刚好是你需要的就往下吧,不需要的也可以继续..... 其实网络上已经有的了类似的成熟插件,比如基于mobiscroll, ...

  4. Big Data應用:以"玩家意見"之數據分析來探討何謂"健康型線上遊戲"(上)

    首先,所有資料都可以從網路上找到,只是我做了一些分析與整理而已.純粹分享心得~~ 最近再做研究的時候我跟我的同事K先生在某次偶然的討論中發現了一件有趣的事情. [疑~~~~~~~新楓之谷的玩家人氣指數 ...

  5. SQL server 跨库插入数据

    1.INSERT INTO SELECT语句 语句形式为: Insert into Table2(field1,field2,...) select value1,value2,... from Ta ...

  6. MongoDB的安装和基本操作

    一.使用前的准备(windows下的安装)  1.下载 目前MongoDB的官网不知道问什么不能进行下载了,但是可以在MongoDB中文论坛进行下载, 地址如下:http://www.mongoing ...

  7. SQL SERVER 高级编程 - 自定义函数 拾忆

    每个人都很忙,但是花10分钟复习下,总结下基础东西还是很有益处的. 背景: 总结一句,使用简便,还能递归,是的SQL更简洁,相对比一大堆的关联语句,而且关联一大堆还不一定实现特定功能.而且共用部分可以 ...

  8. oracle学习笔记4:PL/SQL

    PL/SQL是没命名的存储过程,函数,触发器,PL/SQL块的语法格式如下: [declare] --声明部分,可选 begin --执行部分,必须 [exception] --异常处理部分,可选 e ...

  9. spring 的 PropertyPlaceholderConfigurer读取的属性怎么访问 (java访问方式,不是xml中的占位符哦)及此类的应用

    一.1.占位符的应用:(@Autowired注解方式,不需要建立set与get方法了,xml注入也不需要写了) http://www.cnblogs.com/susuyu/archive/2012/0 ...

  10. CABasicAnimation添加动画离开屏幕就动画停止的问题

    解决方法: animation.removedOnCompletion = NO;