highchart導出圖片中文亂碼解決

該文是解決highchart導出中文亂碼的筆記。

步驟:
1、下載jar包
spacer.gifspacer.gifspacer.gifspacer.gifspacer.gif
我下了5個,網上說可以下載4個
2.修改web.xml
3.新建servlet
4.將highchats 的exporting屬性的url修改爲 自己建立的servlet
具體如下:
2.web.xml中增加如下代碼
<!--begin exporter highcharts-->
<servlet>
<servlet-name>HighChartsServlet</servlet-name>
<servlet-class>com.sinosoft.lis.highcharts.HighChartsServlet</servlet-class>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HighChartsServlet</servlet-name>
<url-pattern>/getHighchartServlet</url-pattern>
</servlet-mapping>
<!--over exporter highcharts-->
3.sevlet代碼如下
packagecom.sinosoft.lis.highcharts;

importjava.io.IOException;
importjava.io.StringReader;

importjavax.servlet.ServletException;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

importorg.apache.batik.transcoder.Transcoder;
importorg.apache.batik.transcoder.TranscoderException;
importorg.apache.batik.transcoder.TranscoderInput;
importorg.apache.batik.transcoder.TranscoderOutput;
importorg.apache.batik.transcoder.image.JPEGTranscoder;
importorg.apache.batik.transcoder.image.PNGTranscoder;
importorg.apache.fop.svg.PDFTranscoder;

/**
* Servlet implementation class for the batik Transcoder
*@authortangyujing
* 2013-09-06上午03:54:39
*/
publicclassHighChartsServletextendsHttpServlet {
privatestaticfinallongserialVersionUID= 3920224595120519682L;
publicHighChartsServlet() {
super();
}

protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
doPost(request,response);
}
protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException{
request.setCharacterEncoding("utf-8");//注意編碼
String type = request.getParameter("type");
String svg = request.getParameter("svg");
ServletOutputStream out = response.getOutputStream();
if(null!= type &&null!= svg){
// This line is necessary due to a bug in the highcharts SVG generator for IE
// I'm guessing it wont be needed later.
svg = svg.replaceAll(":rect","rect");
String ext ="";
Transcoder t =null;
if(type.equals("image/png")) {
ext ="png";
t =newPNGTranscoder();
}elseif(type.equals("image/jpeg")) {
ext ="jpg";
t =newJPEGTranscoder();

}elseif(type.equals("application/pdf")) {
ext ="pdf";
t =newPDFTranscoder();

}elseif(type.equals("image/svg+xml")) {
ext ="svg";
}
response.addHeader("Content-Disposition","attachment; filename=chart."+ext);
response.addHeader("Content-Type", type);
if(null!= t){
TranscoderInput input =newTranscoderInput(newStringReader(svg));
TranscoderOutput output =newTranscoderOutput(out);
try{
t.transcode(input,output);
}catch(TranscoderException e){
out.print("Problem transcoding stream. See the web logs for more details.");
e.printStackTrace();
}
}elseif(ext =="svg"){
out.print(svg);
}else{
out.print("Invalid type: "+ type);
}
}else{
response.addHeader("Content-Type","text/html");
out.println("Usage:\n\tParameter [svg]: The DOM Element to be converted.\n\tParameter [type]: The destination MIME type for the elment to be transcoded.");
}
out.flush();
out.close();
}
}
4. jsp中highchs的導出功能
//增加導出功能
exporting: {
enabled:true,
///url:getRootPath()+"/getHighchartServlet",
url:'http://localhost:8080/xiangmuming/getHighchartServlet',
filename:'chart',
width:800,
type:'image/png'
},


或者採用(這是設置時間方法,下載pdf)

chart.exportChart({
url:'http://localhost:8080/hr821/getHighchartServlet',
type:'application/pdf',
filename:'fff'
});//導出pdf


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章