`
fackyou200
  • 浏览: 310966 次
  • 性别: Icon_minigender_1
  • 来自: 山西太原
社区版块
存档分类
最新评论

Java编写的HighCharts服务端图表下载程序

阅读更多

 

      HighCharts一是款基于SVG的图表工具,用jQuery与SVG交互,具有动画效果,并能实现钻(这个字搞不好写错了)取功能。可能由于HighCharts是收费的,所以图表的下载代码并没有开放,大家一定会发现,只有连接了互联网,才能使用此功能,这在实际的项目中当然是不能用了,因为大部份的企业局域网是不能访问互联网的,那就只好自己来开发这块功能了。

    1、首先我们要讲讲SVG,那么什么是SVG呢?

    SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG由W3C制定,是一个开放标准。 SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。

    SVG在网络上有很多教程,这里我就不详细介绍了,大家可以参考以下链接:http://www.chinasvg.com

 

    2、我们点击导出图片的时候实际上是吧svg图片数据以post请求的方式发送给了Exports.highcharts.com, 该站   点是以php程序出来这些数据的。    

        这个是从某位高手那里找来的,老外写的,用java来处理svg 图片数据导出各种图片。

        使用的是apache 的batik, 必须下载batik的jar包,

        这个包是干嘛的?我现在只知道是用来将svg 图片数据转成各种格式图片的。

 

    HighChartsAPI

 

 

DownloadCharAction.java

 

package com.zh.dy.action.upload;




import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringReader;

import javax.servlet.ServletOutputStream;

import org.apache.batik.transcoder.SVGAbstractTranscoder;
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;
import org.apache.struts2.ServletActionContext;

import com.zh.dy.action.supers.Action;
import com.zh.dy.utils.highcharts.ChartsType;
import com.zh.dy.utils.highcharts.FileExtendsName;


public class DownloadCharAction extends Action {

	

	/**
	 * 
	 */
	private static final long serialVersionUID = 5377397425073812187L;
	
	
	private String serverPath;   
    private static String pdfFileName;   
    private static String jpgFileName;   
    private static String pngFileName;   
    private static String svgFileName;   
    //private static String serverFolder="/uploads/charts/"; 
	

	@Override
	public String execute() throws Exception {
		serverPath=ServletActionContext.getServletContext().getRealPath("uploadFiles");
		File dir = new File(serverPath);
		// 如果这个目录不存在,则创建它。
		if (!dir.exists())
			dir.mkdir();
        
		// 创建当前类型文件所在目录
		serverPath = serverPath + "\\" + "tj\\";
		dir = new File(serverPath);
		// 如果这个目录不存在,则创建它。
		if (!dir.exists())
			dir.mkdir();

		

		
		String fileName = this.getRequest().getParameter("filename");  
        String svg = this.getRequest().getParameter("svg");   
        String type = this.getRequest().getParameter("type");   
        String width = this.getRequest().getParameter("width");   
        pdfFileName=serverPath+fileName+FileExtendsName.pdf.getGetFileExtendName();
        jpgFileName=serverPath+fileName+FileExtendsName.jpg.getGetFileExtendName();   
        pngFileName=serverPath+fileName+FileExtendsName.png.getGetFileExtendName();   
        svgFileName=serverPath+fileName+FileExtendsName.svg.getGetFileExtendName();  
        

        File file = null;   
  
        TranscoderInput transInput = new TranscoderInput();   
        transInput.setReader(new StringReader(svg));   
        SVGAbstractTranscoder transCoder = null;   
        TranscoderOutput transOutput = null;   
           
        if (ChartsType.image_png.getChartsTypeName().equalsIgnoreCase(type)) {   
            transCoder = new PNGTranscoder();   
            file = new File(pngFileName);   
        }   
        if (ChartsType.image_jpeg.getChartsTypeName().equalsIgnoreCase(type)) {   
            transCoder = new JPEGTranscoder();   
            file = new File(jpgFileName);   
        }   
        if (ChartsType.application_pdf.getChartsTypeName().equalsIgnoreCase(type)) {   
            transCoder = new PDFTranscoder();   
            file = new File(pdfFileName);   
        }   
        if (ChartsType.image_svg_xml.getChartsTypeName().equalsIgnoreCase(type)) {   
            file = new File(svgFileName);   
            OutputStream output = new FileOutputStream(file);   
            output.write(svg.getBytes());   
            output.flush();   
            output.close();   
        }   
        if (transCoder != null) {   
            transCoder.addTranscodingHint(JPEGTranscoder.KEY_WIDTH, new Float(   
                    width));   
            OutputStream output = new FileOutputStream(file);   
            transOutput = new TranscoderOutput(output);   
            try {   
                transCoder.transcode(transInput, transOutput);   
                output.flush();   
                output.close();   
            } catch (TranscoderException e) {   
                e.printStackTrace();   
            }   
        }   
        if(file.exists())   
        {   
            //复位response   
            this.getResponse().reset();   
            this.getResponse().setContentType(ChartsType.contentType.getChartsTypeName());   
            this.getResponse().setBufferSize(2048);   
            this.getResponse().setHeader(ChartsType.content_Disposition.getChartsTypeName(), ChartsType.attachment.getChartsTypeName()+file.getName());   
            this.getResponse().setContentLength(Integer.parseInt(file.length()+""));   
            InputStream is=new FileInputStream(file);   
            byte[] buf=new byte[2048];   
            int resultLength=0;   
            ServletOutputStream sos=this.getResponse().getOutputStream();   
            while((resultLength=is.read(buf))!=-1)   
            {   
                sos.write(buf,0,resultLength);   
                   
            }   
            sos.flush();   
            sos.close();   
            this.getResponse().flushBuffer();   
        }   
		
		return null;
	}

	
}

 

 

FileExtendsName.java

 

package com.zh.dy.utils.highcharts;

public enum FileExtendsName {

	svg(".svg"), pdf(".pdf"), png(".png"), jpg(".jpg");   
	  
    private String getFileExtendName;   
  
    public String getGetFileExtendName() {   
        return getFileExtendName;   
    }   
  
    private FileExtendsName(String getFileExtendName) {   
        this.getFileExtendName = getFileExtendName;   
    }   


}

 

 

ChartsType.java

 

package com.zh.dy.utils.highcharts;

public enum ChartsType {

	image_png("image/png"), image_jpeg("image/jpeg"), application_pdf(   
    "application/pdf"), image_svg_xml("image/svg+xml"),contentType("application/x-download"),content_Disposition("Content-Disposition"),attachment("attachment;filename=");   

	private String chartsTypeName;   
	
	
	private ChartsType(String chartsTypeName) {   
		this.chartsTypeName = chartsTypeName;   
	}   
	
	public String getChartsTypeName() {   
		return chartsTypeName;   
	}   
	
	public void setChartsTypeName(String chartsTypeName) {   
		this.chartsTypeName = chartsTypeName;   
	}   
}

 

 

修改exporting.js中的服务端url,默认是http://export.highcharts.com/,我们需要改成自己项目中的URL。这样,我们就可以实现图表下载了。 

分享到:
评论
5 楼 feijiankang2007 2013-02-26  
请教lz,highcharts   transCoder = new PDFTranscoder()的地方报错,是jar架包引入不正确吗?怎么解决?    
4 楼 fackyou200 2013-02-26  
liuwei88212 写道
Fatyu 写道
导出pdf中文乱码怎么解决的?

中文变成了# 号,request和response编码都设置过了,还是没用!

lz有方案么?

这个都好久了,好多都忘了。你再查查.....
3 楼 liuwei88212 2013-02-22  
Fatyu 写道
导出pdf中文乱码怎么解决的?

中文变成了# 号,request和response编码都设置过了,还是没用!

lz有方案么?
2 楼 Fatyu 2013-01-09  
导出pdf中文乱码怎么解决的?
1 楼 LewJun 2012-05-16  
请问,页面怎么传入   String fileName = this.getRequest().getParameter("filename");   
        String svg = this.getRequest().getParameter("svg");    
        String type = this.getRequest().getParameter("type");    
        String width = this.getRequest().getParameter("width");   
参数啊?

相关推荐

    HighCharts服务端图表下载程序

    HighCharts服务端图表下载程序是专门针对HighCharts图表的一个实用工具,主要功能是允许用户在服务器端生成并下载图表。这个程序是用Java语言编写的,因此具备了跨平台的特性,可以在各种运行Java环境的系统上运行。...

    Java和Highcharts实现折线图

    Highcharts是一个流行的JavaScript库,专门用于创建高质量的图表,而Java则作为后端语言,负责处理数据并将其传递给前端。 首先,我们需要理解Java的角色。在Java中,我们可以使用各种库,如Spring Boot或JavaFX,...

    3D图表Highcharts(3D)

    Highcharts是一款强大的JavaScript图表库,它能够帮助开发者创建出各种精美、交互性强的2D和3D图表。在“3D图表Highcharts”这个主题中,我们将深入探讨如何利用Highcharts来实现三维图表的制作,以及它在数据可视化...

    Highcharts图表库 v9.3.3.zip

    Highcharts图表库是一款广泛应用于网页数据可视化的JavaScript库,它提供了丰富的图表类型,如柱状图、折线图、饼图、散点图等,帮助开发者轻松创建交互式的图表。v9.3.3是Highcharts的一个更新版本,带来了更多功能...

    Highcharts网页图表制作实例详解.part1

    Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。HighCharts支持的图表类型有曲线图、区域图...

    Highcharts生成图表所需源码包

    首先,在HTML文件中引入这两个脚本,然后使用JavaScript编写创建图表的代码,通过配置`Highcharts.Options`来设定图表的类型、数据、标题、颜色等属性。例如: ```html <script src="path/to/highcharts.js"> ...

    Highcharts网页图表制作实例详解.part2

    Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。HighCharts支持的图表类型有曲线图、区域图...

    HighCharts万能图表库(含源码)

    HighCharts是一款广泛应用于Web开发中的专业图表库,它以其丰富的功能、出色的性能和易于使用而闻名。这个"HighCharts万能图表库(含源码)"提供了成熟稳定的版本,包括源代码,非常适合开发者进行深入学习和自定义...

    highCharts图表下载需要jar包

    HighCharts是一款广泛...理解以上知识点,结合`javaHighcharts`库,你就能在Java环境中顺利地实现HighCharts图表的下载功能。在实际项目中,不断学习和实践,你会更加熟练地掌握这个工具,提升数据可视化的用户体验。

    Highcharts最全示例程序

    本压缩包"Highcharts-2.3.2"包含了Highcharts 2.3.2版本的源码和相关资源,为开发者提供了丰富的示例程序,以便更好地理解和应用这个强大的图表库。 首先,我们来深入了解一下Highcharts的基本特性: 1. **易用性*...

    获取Highcharts图表对象的方法汇总

    获取Highcharts图表对象的方法汇总

    Echarts和Highcharts制作图表

    Echarts和Highcharts都是流行的JavaScript库,用于在Web应用程序中创建交互式图表和图形。它们在数据可视化领域具有广泛的应用,能够帮助用户更好地理解和解析复杂的数据。以下是对这两个库及其基本功能的详细说明:...

    java后端调用hightchars生成图片

    为了在Java后端生成Highcharts图表,我们可以使用“highcharts-serverside-export-master”这个压缩包中的资源。这个项目可能是对Highcharts的一个后端实现,允许我们在Java环境中解析Highcharts的配置和数据,然后...

    Java 与 Highcharts开发

    在IT行业中,Java和Highcharts是两个非常重要的技术领域,它们在数据可视化和Web应用程序开发中发挥着关键作用。Java是一种广泛使用的编程语言,而Highcharts则是一个强大的JavaScript库,用于创建互动式图表和图形...

    highcharts 导出图片 例子 .net C# Demo 工具类

    HighCharts是一款广泛应用于Web开发中的JavaScript图表库,用于创建各种数据可视化效果,如折线图、柱状图、饼图等。在实际项目中,有时我们需要将这些动态生成的图表导出为静态图片,以便于打印、分享或离线查看。...

    highcharts图表插件(中文包和本地下载)

    4. **本地下载的插件**:这个部分可能包含了一些特定的本地化或优化插件,使得开发者可以在不连接互联网的情况下,也能使用Highcharts的功能,比如在离线环境中生成图表。这有助于提高应用的稳定性和性能,尤其是在...

    java实现的highcharts与ajax结合动态实时获取数据更新图表

    本教程将探讨如何在Java后端与前端使用Highcharts和Ajax结合,动态地从服务器获取数据并更新图表。 一、Highcharts的基本概念与使用 Highcharts是基于HTML5 SVG的图表库,支持现代浏览器和IE6+(通过VML)。它提供...

    Java HighCharts实例demo

    Java HighCharts是一个用于在Java应用程序中展示图表的库,它允许开发者通过Java代码创建各种动态、交互式的图表。HighCharts本身是一个JavaScript库,但通过Java封装,使得开发者可以在后端处理数据并生成图表,...

    EasyUI图表插件Highcharts源码Demo(Java)

    通过集成Highcharts,我们可以利用EasyUI的便利性来构建具有高质量图表的应用程序。 在"EasyUI图表插件Highcharts源码Demo(Java)"中,你可以学习如何在Java环境下集成和使用Highcharts。首先,你需要在项目中引入...

Global site tag (gtag.js) - Google Analytics