JFreeChart 中文乱码主要是缺少字体,可将其字体设置为系统存在的字体,乱码即可解决:
public static java.awt.Font getFont(){ java.awt.Font font; try { File fontFile = ResourceUtils.getFile("classpath:font/simsun.ttc");//字体文件要放在class path的font文件夹下 GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] evnfonts = gEnv.getAvailableFontFamilyNames(); List<String> list = Arrays.asList(evnfonts); if (!list.contains("宋体")) {//系统没有安装宋体,用字体文件创建一个 font = java.awt.Font.createFont(java.awt.Font.TRUETYPE_FONT, fontFile); } else { font = new java.awt.Font("宋体", java.awt.Font.PLAIN, 12);//读取系统字体 } return font; } catch (FileNotFoundException e) { log.error("The font file is not exist! Please add the simsun font file to 'classpath:font/simsun.ttc'."); } catch (Exception e) { log.error("Error occured when creating simsun font."); } return null; }
设置JFreeChart 字体:
public static JFreeChart createBarChart3D(DefaultCategoryDataset dataset,String title, String xAxisLabel, String yAxisLabel) { JFreeChart chart = ChartFactory.createBarChart3D(title, xAxisLabel, yAxisLabel, dataset, PlotOrientation.VERTICAL, false, false, false); CategoryPlot plot = chart.getCategoryPlot(); chart.setBackgroundPaint(Color.WHITE); BarRenderer3D renderer = new BarRenderer3D(); renderer.setBaseOutlinePaint(Color.BLACK); renderer.setMaximumBarWidth(0.1); renderer.setSeriesPaint(0, new Color(20, 180, 20)); renderer.setItemMargin(0.1); renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setItemLabelPaint(Color.BLACK); renderer.setItemLabelsVisible(true); renderer.setBaseItemLabelsVisible(true); renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT)); plot.setRenderer(renderer); plot.setForegroundAlpha(0.8f); Font font = FontUtils.getFont(); if(font != null){ plot.getDomainAxis().setLabelFont(font); plot.getDomainAxis().setTickLabelFont(font); plot.getRangeAxis().setLabelFont(font); plot.getRangeAxis().setTickLabelFont(font); Font titleFont = font.deriveFont(Font.BOLD,22); chart.getTitle().setFont(titleFont); } return chart; }
simsun.ttc 字体的下载见:(文章的附件)