본문 바로가기

Programming/JAVA/JSP

JFreeChart 한글 깨짐 해결 방법 2

네이버에서 퍼옴

기존에 내가 사용했던 방법보다 쓰기 쉬워서 퍼왔다.


한글때문에 여러글을 봤는데 chart java소스를 수정해서 재컴파일해서 적용하는가 하면

한글이 들어간 부분의 Font를 전부 변경한다거나 여러 방법을 쓰시고 계시더군요.

 

제가 해결한 방법을 간단히 소스로 안내해 드립니다. 참고하세요.

 

전체적인 소스는 저도 참고한 것이고 한글 부분만 제가 추가하였으며 이렇게 처리되기 위해서는

createPieChart 메서드 인자 사용에 주의해야 합니다. boolean legend  이 부분을 true로...

 

JFreeChart chart = ChartFactory.createPieChart(
                    title, //java.lang.String title
                    dataset, //PieDataset dataset
                    true, //boolean legend
                    true, //boolean tooltips
                    false); //java.util.Locale locale 

 

혹, 텍스트에 대한 한글 처리를 더 해야될 부분이 있는지는 저도 더 경험해 봐야...

그럼... ^^

 

--------------------------------------------------------------------------

<%@ page language="java" contentType="text/html; charset=EUC-KR"  pageEncoding="EUC-KR"%>
<%@ page import!="java.io.*" %>
<%@ page import!="java.awt.Font" %>

<%@ page import!="org.jfree.data.general.DefaultPieDataset"%>
<%@ page import!="org.jfree.chart.JFreeChart"%>
<%@ page import!="org.jfree.chart.plot.PiePlot"%>
<%@ page import!="org.jfree.chart.ChartRenderingInfo"%>
<%@ page import!="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page import!="org.jfree.chart.entity.StandardEntityCollection"%>
<%@ page import!="org.jfree.chart.ChartFactory"%>
<%@ page import!="org.jfree.chart.ChartUtilities"%>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>JChart 연습하기</title>
</head>
<body>
<%

  DefaultPieDataset ds = new DefaultPieDataset();
  ds.setValue("홍길동", new Double(40.0));
  ds.setValue("홍길숙", new Double(25.0));
  ds.setValue("심원보", new Double(35.0));
  ds.setValue("NPS", new Double(15.0));
  ds.setValue("기타", new Double(15.0));

          

  JFreeChart chart = ChartFactory.createPieChart("득점분포", ds, true, true, false);
  chart.setBackgroundPaint(java.awt.Color.white);
  chart.setTitle("JChart 연습하기");
  
  chart.getTitle().setFont(new Font("돋움", Font.BOLD, 20));
  chart.getLegend().setItemFont(new Font("돋움", Font.PLAIN, 10));

  PiePlot plot = (PiePlot) chart.getPlot();
  plot.setLabelFont(new Font("돋움", Font.PLAIN, 12));

 

  ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); 
       
       //JPG 파일명을 만들어내기
        String fileName = ServletUtilities.saveChartAsJPEG(chart, 600, 300, info, session);          
     
        System.out.println("파일명 : " +fileName);
       
       //특정 임시 폴더에 이미지 파일을 만들어냄.
        String dir = application.getRealPath("/upload/"); // 파일경로 지정
        dir = "D:\\" + dir.substring(3) + "/";
        String filepath = dir + fileName;
        System.out.println("File path = "+ filepath);
 
        FileOutputStream fos = new FileOutputStream(new File(filepath));
        File f = new File(filepath);
        ChartUtilities.writeChartAsPNG(fos, chart, 600, 300);
       
        String graphURL = request.getContextPath() + "/upload/" + fileName;
        //System.out.println(graphURL);
       %>
       <img src="<%=graphURL%>"/> <!--//파일 경로와 파일명을 받아서 차트를 보여줌-->

</body>
</html>