본문 바로가기
JAVA

JFReeChart 한글 처리 방법

by 정윤재 2009. 3. 30.

JFReeChart를 써보신 분들은 한글이 안되는 것에 놀라신적이

있으실 것 같다.

여기서 한글이 왜 안돼는지는 솔직히 감으로만 알고 있을 뿐이고

정확히 설명은 못하겠다.

어쨌든 본인의 생각엔 jfreechart 자체에서 글자 font를 정해주는데

그게 자바나 웹서버의 font 설정과 다르기 때문이 아닌가 생각을

할 뿐이다.

아래 코드는 window 기반에서는 되는데 유닉스 쪽을 하려니 다시 설정파일을

건드려야 하는 건지 안되기 시작했다. 그래서 난 fusion chart 쪽으로 넘어 갔다

해당 코드는 jsp 분류쪽에 있으니 참고하시길 바란다.

서버쪽 애들이 절대로 설정은 못건드린다고 root 권한 못준다고 해서 어쩔수 없이

챠트를 바꿨다 ㅠ.ㅠ 개고생해서 겨우 겨우 했네...


이 문제로 찾아보면 java 설정을 바꾸거나 jfreechart의 jar 파일을

압축을 풀어서 소스를 고친다거나 하는데...

솔직히 설정을 바꾸는것은 다른곳에 옮겨 놨을 때 또 안된다는 얘기가

아닌가?

그래서 난 좀 다른 방법을 써보기로 했다.

일단 font 문제인건 확실 하니 jfreechart 에서 쓰는 font가 무엇인지 확인해 보자

JFreeChart chart = ChartFactory.createPieChart("food", dataset, false,true, false);
System.out.println(chart.getTitle().getFont().getName());

요렇게 하면 나 같은 경우는

font 가 SansSerif 라는 font가 나왔다.

그래서 한글이 나오는 부분을

  try{
  
   bread   =   new String(bread.getBytes("8859_1"),"SansSerif");
   pizza   =   new String(pizza.getBytes("8859_1"),"SansSerif");
   water   =   new String(water.getBytes("8859_1"),"SansSerif");
  
  }catch(Exception e){
   e.printStackTrace();
  }
  
  dataset.setValue(bread,5000);
  dataset.setValue(pizza,11000);

  dataset.setValue(water,4000);

그랬더니 이렇게 정상적으로 한글이 잘 나왔다.






아래에 웹기반으로 한글이 성공했던 소스를 넣어 놓겠습니다.

//Statstic-Control.jsp

<%@ page import = "com.mtelo.chart.*,java.io.*" language="java"
    pageEncoding="EUC-KR"%>
<%@ page import = "org.jfree.chart.*" %>
getServletContext().getRealPath("/graph.jpg");
<%
System.setProperty("java.awt.headless", "true");
testChartDAO dao = new testChartDAO();
 JFreeChart chart= dao.getChart();
 
 String fileName=request.getRealPath("/graph.jpg");
 System.out.println("처음 만들어진 경로"+fileName);
 
 File file1=new File(fileName);
 FileOutputStream fos=new FileOutputStream(file1);
 
 ChartUtilities.writeChartAsPNG(fos, chart, 400, 400);
 fos.close();
 
 request.setAttribute("fn",fileName);
%>
<jsp:forward page="Statistic-view.jsp"/>



//Statistic-view.jsp

<%@ page import="java.io.*" language="java" pageEncoding="EUC-KR"%>
<%
String fileName=(String)request.getAttribute("fn");
System.out.println("넘어온 경로 : "+fileName);
%>
<html>
<head>
</head>
<body>
<p>
 <center>
   <img src="/VRS-WEB/graph.jpg"><br>
   <a href="Statstic-Form.jsp">통계 보기 페이지로 이동</a>
 </center>
</body>
</html>


//testChartDAO.java

package com.mtelo.chart;
import java.awt.Color;import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
public class testChartDAO {
 public JFreeChart getChart(){
  DefaultPieDataset dataset=new DefaultPieDataset();
  
  String bread  =   "빵";
  String pizza  =   "피자";
  String water  =   "물";
  
  try{
  
   bread   =   new String(bread.getBytes("8859_1"),"SansSerif");
   pizza   =   new String(pizza.getBytes("8859_1"),"SansSerif");
   water   =   new String(water.getBytes("8859_1"),"SansSerif");
  
  }catch(Exception e){
   e.printStackTrace();
  }
  
  dataset.setValue(bread,5000);
  dataset.setValue(pizza,11000);

 

  dataset.setValue(water,4000);
  
  
  
  System.setProperty("java.awt.headless", "true");

 

  JFreeChart chart = ChartFactory.createPieChart("food", dataset, false,true, false);  chart.setBackgroundPaint(Color.yellow);
  chart.getTitle().setPaint(Color.blue);
  
    System.out.println(chart.getTitle().getFont().getName());
  

 

  
  return chart;
 }
}





 


댓글