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;
}
}
'JAVA' 카테고리의 다른 글
자바로 xml 형식의 String 파싱 (1) | 2009.04.20 |
---|---|
JFREECHART 실전 코드 (0) | 2009.03.30 |
java.sql.Date 를 String 데이터로 변환시켜주는 법 (0) | 2009.03.28 |
유닉스에서 JFReeChart 에러 문제 (0) | 2009.03.28 |
자바로 FTP Client 구현 (put, get) (4) | 2009.03.03 |
댓글