- Highchars导出图表,项目有用到highchars,别人写好了,但是导出功能却没有实现,又是百度又是谷歌,整理了各方各面的代码,终于自己测试成功了。
- 所需要的包
- xerces.jar
- pdf-transcoder.jar
- batik-all-1.6.jar
- Web.xml文件
- <servlet>
- <servlet-name>exportImage</servlet-name>
- <servlet-class> ExportImage</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>exportImage</servlet-name>
- <url-pattern>/exportImage</url-pattern>
- </servlet-mapping>
- Java代码
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.io.StringReader;
- import javax.servlet.ServletException;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.batik.transcoder.Transcoder;
- import org.apache.batik.transcoder.TranscoderException;
- import org.apache.batik.transcoder.TranscoderInput;
- import org.apache.batik.transcoder.TranscoderOutput;
- import org.apache.batik.transcoder.image.JPEGTranscoder;
- import org.apache.batik.transcoder.image.PNGTranscoder;
- import org.apache.fop.svg.PDFTranscoder;
- public class ExportImage extends HttpServlet {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- public ExportImage() {
- super();
- }
- public void destroy() {
- super.destroy();
- }
- public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- request.setCharacterEncoding("utf-8");// 设置编码,解决乱码问题
- String type = request.getParameter("type");
- String svg = request.getParameter("svg");
- String filename = request.getParameter("filename");
- ServletOutputStream out = response.getOutputStream();
- if (null != type && null != svg) {
- svg = svg.replaceAll(":rect", "rect");
- String ext = "";
- Transcoder t = null;
- if (type.equals("image/png")) {
- ext = "png";
- t = new PNGTranscoder();
- } else if (type.equals("image/jpeg")) {
- ext = "jpg";
- t = new JPEGTranscoder();
- } else if (type.equals("application/pdf")) {
- ext = "pdf";
- t = new PDFTranscoder();
- } else if (type.equals("image/svg+xml")) {
- ext = "svg";
- }
- response.addHeader("Content-Disposition", "attachment; filename="+ filename + "." + ext);
- response.addHeader("Content-Type", type);
- if (null != t) {
- TranscoderInput input = new TranscoderInput(new StringReader(svg));
- TranscoderOutput output = new TranscoderOutput(out);
- try {
- t.transcode(input, output);
- } catch (TranscoderException e) {
- e.printStackTrace();
- }
- } else if (ext.equals("svg")) {
- OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");
- writer.append(svg);
- writer.close();
- } else {
- out.print("Invalid type: " + type);
- }
- } else {
- response.addHeader("Content-Type", "text/html");
- }
- out.flush();
- out.close();
- }
- public void init() throws ServletException {
- }
- }
- Jsp代码
- <script type="text/javascript" src="highstock.js"></script>
- <script type="text/javascript" src="exporting.js"></script>
- //hichars需要的js文件
- <script type="text/javascript">
- $(function () {
- var chart;
- $(document).ready(function() {
- chart = new Highcharts.Chart({
- chart: {
- renderTo: 'container',
- type: 'line'
- },
- title: {
- text: '上半年统计温度平均值'
- },
- xAxis: {
- categories: ['Jan', 'Feb','Mar','Apr','May','Jun']
- },
- yAxis: {
- title: {
- text: 'Temperature(°C)'
- }
- },
- tooltip: {
- formatter: function() {
- return this.point.name + "<br>" + this.y +'°C';
- }
- },
- exporting:{
- // 是否允许导出
- enabled:true,
- filename:'Temperature',
- enableImages : true,
- url : '/exportImage'
- },
- plotOptions: {
- line: {
- cursor: 'pointer',
- dataLabels: {
- enabled: true
- },
- enableMouseTracking: true
- }
- },
- series: [{
- name: '一号车间',
- data: [3.4, 3.4, 3.3, 3.5, 3.2, 3.5]
- },{
- name: '二号车间',
- data: [3.2, 3.8, 3.7, 3.3, 3.0, 3.0]
- },{
- name: '三号车间',
- data: [3.9, 3.6, 3.5, 3.4, 3.5, 3.0]
- },{
- name: '四号车间',
- data: [7.0, 6.9, 9.5, 6.5, 8.2, 7.5]
- },{
- name: '五号车间',
- data: [9.0, 7.8, 5.6, 7.9, 7.8, 8.5]
- }]
- });
- });
- });
- </script>