原因:首先,JFreeChart和中文验证码的乱码问题和jsp的编码无关,是由于Java虚拟机找不到字体文件造成的,所以同类的Swing或者AWT的中文乱码问题也适用

环境:
JDK1.5(JDK版本很重要,如果是1.4.2版本的话,JRE目录下的字体配置文件不大一样)
RedHat4.0
Tomcat5.0

解决方法:
1.确认%JavaHome%/jre/lib/fonts目录下存在zysong.ttf
2.在%JavaHome%/jre/lib/fonts目录下执行"ttmkfdir -o fonts.dir"命令,重新生成fonts.dir文件
3.确认/usr/share/fonts/zh_CN/TrueType目录存在,如果不存在则mkdir创建
4.确认/usr/share/fonts/zh_CN/TrueType目录下存在zysong.ttf
5.在%JavaHome%/jre/lib目录下,执行 cp fontconfig.RedHat.3.properties.src fontconfig.properties
6.重新启动tomcat,大功告成!

下面提供下载字体

http://www.javaeye.com/topics/download/0cc6d142-fc8a-466a-921c-158c6732e635

 

在windows下开发的web项目,移植到linux或unix系统下,常导致一些乱码问题,主要是jdk1.5的汉字字体linux和unix支持得不够充分。
     解决方案:拷贝windows的simsun.ttc 到java安装目录的字体目录下,改名为simsun.ttf
服务器上的目录为/opt/jdk1.5.0_02/jre/lib/fonts
然后修改fonts.dir为这样,实际上就是设置为不管什么字体都用简宋体,包括英文
48
simsun.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-1
simsun.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-1
simsun.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-1
simsun.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-1
simsun.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-1
simsun.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-1
simsun.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-1
simsun.ttf -b&h-lucidatypewriter-bold-r-normal-sans-0-0-0-0-m-0-iso8859-1
simsun.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-2
simsun.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-2
simsun.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-2
simsun.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-2
simsun.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-2
simsun.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-2
simsun.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-2
simsun.ttf -b&h-lucidatypewriter-bold-r-normal-sans-0-0-0-0-m-0-iso8859-2
simsun.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-4
simsun.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-4
simsun.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-4
simsun.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-4
simsun.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-4
simsun.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-4
simsun.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-4
simsun.ttf -b&h-lucidatypewriter-bold-r-normal-sans-0-0-0-0-m-0-iso8859-4
simsun.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-5
simsun.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-5
simsun.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-5
simsun.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-5
simsun.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-5
simsun.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-5
simsun.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-5
simsun.ttf -b&h-lucidatypewriter-bold-r-normal-sans-0-0-0-0-m-0-iso8859-5
simsun.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-7
simsun.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-7
simsun.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-7
simsun.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-7
simsun.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-7
simsun.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-7
simsun.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-7
simsun.ttf -b&h-lucidatypewriter-bold-r-normal-sans-0-0-0-0-m-0-iso8859-7
simsun.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-9
simsun.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-9
simsun.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-9
simsun.ttf -b&h-lucidabright-demibold-i-normal--0-0-0-0-p-0-iso8859-9
simsun.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-9
simsun.ttf -b&h-lucidasans-bold-r-normal-sans-0-0-0-0-p-0-iso8859-9
simsun.ttf -b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-iso8859-9

最后重起服务。



开心过好每一天。。。。。

 #########################################################

http://fz8224.iteye.com/blog/311365

1.找到当前jar对应版本的jfreechart源代码. 
2.全文替换所有new Font("XXXX")为new Font("宋体"). 
3.重新编译,打包. 

解决了,吼吼!

 

http://blog.csdn.net/dreambegin/article/details/5754330

JFreeChart中文乱码和文字模糊问题的通用解决方案

分类: java技术交流 211人阅读 评论(0) 收藏 举报

在使用JFreeChart (http://www.jfree.org/jfreechart/ )做中文的图表时,中文乱码是一个最常要处理的问题,看网上许多文章都是在JFreeChart对象上下功夫,每次都得重新设置字体,比较麻烦。其实JFreeChart为我们提供了一个通用的解决方案——ChartTheme 。

 

  ChartTheme有一个默认的实现类StandardChartTheme ,该类提供了图表主题的默认实现,通过ChartFactory 默认将这一实现应用到所有ChartFactory所生成的JFreeChart 对象中,你可以利用ChartFactory的setChartTheme(ChartTheme theme) 方法改变这一默认实现,让所有由ChartFactory生成的图表都应用你所指定的主题。

 

  StandardChartTheme提供如下方法来定制字体:

  • public void setExtraLargeFont(Font font)
  • public void setLargeFont(Font font)
  • public void setRegularFont(Font font)
  • public void setSmallFont(Font font)

  只要重写这几个方法,就可以制定出一个适合中文图表的主题了:

 

 

 

  1. StandardChartTheme theme = new StandardChartTheme("unicode") {  
  2.     public void apply(JFreeChart chart) {  
  3.         chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,  
  4.                 RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);  
  5.         super.apply(chart);  
  6.     }  
  7. };  
  8. theme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 20));  
  9. theme.setLargeFont(new Font("宋体", Font.PLAIN, 14));  
  10. theme.setRegularFont(new Font("宋体", Font.PLAIN, 12));  
  11. theme.setSmallFont(new Font("宋体", Font.PLAIN, 10));  
  12. ChartFactory.setChartTheme(theme);  
  重写apply(...)方法是为了借机消除文字锯齿.VALUE_TEXT_ANTIALIAS_OFF

 

  ChartFactory.setChartTheme(theme); 用于将该主题作为工厂的默认主题。

 

  这样一来,以后使用ChartFactory创建图表时,都可以自动应用主题中的配置了,做到解决中文乱码和锯齿一劳永逸。

 

 

上面源自网络http://greatghoul.javaeye.com/blog/639396

###########################################################

按照上列方法设置后,柱状图和折线图都显示正常,不过饼状图仍有方框,经过再三查证,找到解决方案。

在饼状图中设置:

  1. PiePlot plot = (PiePlot)freeChart.getPlot();   //这里的freechart是饼状图的JFreeChart 对象。
  2. plot.setLabelFont(new Font("宋体",Font.BOLD,15));  

替换并时设置时聪明点……哈哈,就这样。

 

http://www.itwis.com/plus/view.php?aid=2358

JFreeChart文字模糊这个问题想必大家都不会令人满意吧,网上有提到用修改字体的方式来改善,感觉还是效果不怎么样,所以继续测试,找到了比较满意的解决方法

下面这个图是默认情况下显示的字体

下面这个是改成黑体时候的显示情况

可以看到改成黑体后效果有所改善,不过还是有点模糊
继续看下一张

这个是修改渲染参数后的效果  可以看到文字很清晰了,实际上和photoshop里吧文字设置成名晰是一样的。将文字的抗锯齿参数关闭。
控制这一功能的类就是RenderingHints
将jfreechart里RenderingHints做文字渲染参数的修改
jfreechart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭.
使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字。
这样文字最清晰好看

 

 

 

###########################################################

 

 

http://windows9834.blog.163.com/blog/static/2734500420116163434923/

jfreechart 在centos上中文乱码  

2011-07-16 15:04:34|  分类: Linux |字号 订阅

 
 
环境:
jdk1.6
centos5.5

主要还是jdk无法找到对应的中文字体

windows的字体一般存放在c:\windows\fonts目录下,拷贝你喜欢的字体到linux下,文件是ttf格式,把字体拷贝到/usr/share/fonts的一个目录下(比如:/usr/share/fonts/default),然后执行如下命令

mkfontscale
mkfontdir       //这两条命令是生成字体的索引信息
fc-cache         //更新字体缓存

 
现象:jfreechart生成的图片中,图片内容显示正常,但是中文汉字乱码,这些汉字在定义的时候要么是默认字体要 

么是宋体 
环境: 
JDK: 1.4.2(build 1.4.2-b28) 
OS: CentOS 4.6 
原因:Linux下的JRE不支持中文字库,注意这里是字库而不是如UTF-8等编码方式 
解决方案: 
1、将附件中的font.properties.zh_CN.Redhat保存到%JAVA_HOME%/jre/lib/目录下 
2、将附件中的字库文件zysong.ttf保存到/usr/share/fonts/zh_CN/TrueType/目录下 
3、重启web服务器 

补充: 
1、字体属性文件名必须为font.properties.zh_CN.Redhat。在安装JDK时,jre的lib目录下自动安装了 

font.properties.zh_CN.Redhat8.0,其对应的字库文件zysong也存在相应位置,但是依然乱码,改了名字后问题才解 

决,具体原因需进一步研究 
2、注意font.properties.zh_CN.Redhat文件的最后一行filename.-misc-zysong18030-medium-r-normal–*-%d-*-*- 

c-*-iso10646-1=/usr/share/fonts/zh_CN/TrueType/zysong.ttf,实际上这里就是指向某个字库 
3、网上看到有人说simsun.ttf也可以,但是在我的环境下不行 
4、据说CentOS 5下面也存在此问题,用同样方法可以解决
 
 
 
linux平台上通过jfreechart生成的PNG图像中显示的汉字为方框的问题的解决
 
来源: ChinaUnix博客  日期: 2004.10.29 17:57 (共有条评论) 我要评论
 

参考链接 
http://dev.csdn.net/develop/article/18/18432.shtm
http://www-900.ibm.com/developerWorks/cn/wsdd/library/techarticles/yangyaping0307/waslinux.shtml

出现这个问题的主要原因是SUN的JDK中默认带的font.properties不适合于我使用的系统平台
我的linux是Red Hat Enterprise Linux AS 3,默认系统语言LANG=en_us
首先我们需要将需要用到的字体文件拷贝到/usr/share/fonts目录下
字体文件可以从安装了中文字体的linux上拷过来
例如:我需要使用的是简体中文,那就要将/usr/share/fonts目录下的zh_CN全部拷到我的linux的相同目录下
然后运行一下下面这段小程序判断Linux下使用的字体属性
public class PrintLocale {
    public static void main(String[] args) {
        System.out.println(System.getProperty("user.language"));
        System.out.println(System.getProperty("user.region"));
        System.out.println(System.getProperty("file.encoding"));
        System.out.println(System.getProperty("os.version"));

    }
}

我这里的运行结果是
en
null
ISO-8859-1
2.4.21-4.EL
在Java平台中,字体配置信息主要定义于font.properties系列文件中,存放于JRE/lib目录下。
其中定义了五种平台无关的逻辑字体:Serif, SansSerif, Monospaced, Dialog和DialogInput,
每一个JVM的实现,都必须包含这五种字体。另外,还定义了逻辑字体跟实际字体的映射等信息。
为了支持不同的操作系统版本和Locale,font.properties包含了附带不同后缀的多个版本。
从Sun的文档"Adding Fonts to the Java Runtime"[参见参考文献1]中,我们可以得知: 
在英文环境下,字体属性由无后缀的font.properties 定义。为了一些操作系统的特殊问题,
字体属性文件的名字可以加入操作系统的版本号作为后缀。例如,Solaris 2.5.1 不支持 TrueType 字体,
所以字体属性文件font.properties.5.5.1 将只包含 F3 字体。
在大多数操作系统中,版本后缀的值由System.getProperty("os.version")来确定。
如果环境是日文、韩文、简体中文或繁体中文,就必须使用相应于特定环境的 font.properties 文件。
这些文件可以通过文件名后边加上相应的国家或者locale后缀识别,格式为font.properties.。
该实际上由__三部分构成。
而、和分别对应了系统属性(由System.getProperty方法返回的字符串)"user.language"、"user.region"和"file.encoding"。
而这个font.properties.名也可以跟操作系统的版本结合使用。
概括的讲,Java按照以下顺序搜索字体属性文件:
font.properties.__.
font.properties.__
font.properties._.
font.properties._
font.properties._.
font.properties._
font.properties._
font.properties.
font.properties..
font.properties.
font.properties.
font.properties
根据上面的小程序的结果,可以判断我的linux使用的字体配置信息文件的文件名应该为font.properties.en
(当然,我没有写得很严格,目的是为了能更好的匹配,如果你的系统language是zh_CN,那你的字体配置信息文件的文件名就应该为font.properties.zh_CN)
在编辑字体配置信息文件之前,我们需要做以下工作
打开/usr/share/fonts/zh_CN/TrueType 下面的 font.dir文件,将其中我需要用的字体的名字copy出来,
例如:-misc-ZYSong18030-medium-r-normal--0-0-0-0-c-0-iso10646-1
然后按照java的字体规则改为 -misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1,记住这个字体的名字,我们下面将会用到
然后我们就编辑这个配置文件,你可以将JDK自带的配置文件copy一份,然后修改修改
我比较偷懒,就是这样做的 cp font.properties.zh_CN.Redhat8.0 font.properties.en
然后编辑它,将其中的字体名全部替换成 -misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
在文件的最后加上appendedfontpath=/usr/share/fonts/zh_CN/TrueType
要不然JDK/jre是找不到你的字体文件的
我修改好的font.properties.en如下:
# @(#)font.properties.zh.Redhat.linux 1.4 02/06/10
#
# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
#

# Component Font Mappings
#
serif.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

serif.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
serif.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
serif.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
sansserif.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
sansserif.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
sansserif.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
sansserif.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
monospaced.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
monospaced.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
monospaced.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
monospaced.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
dialog.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
dialog.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
dialog.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
dialog.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
dialoginput.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
dialoginput.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
dialoginput.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
dialoginput.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
# Missing Glyph Character
#
default.char=274f

# Component Font Character Encodings
#
fontcharset.serif.0=sun.io.CharToByteISO8859_1
fontcharset.serif.1=sun.awt.motif.CharToByteX11GBK

fontcharset.sansserif.0=sun.io.CharToByteISO8859_1
fontcharset.sansserif.1=sun.awt.motif.CharToByteX11GBK

fontcharset.monospaced.0=sun.io.CharToByteISO8859_1
fontcharset.monospaced.1=sun.awt.motif.CharToByteX11GBK

fontcharset.dialog.0=sun.io.CharToByteISO8859_1
fontcharset.dialog.1=sun.awt.motif.CharToByteX11GBK

fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1
fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11GBK

# Exclusion Ranges
#

# XFontSet Information
#
fontset.serif.plain=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.serif.italic=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.serif.bold=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.serif.bolditalic=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.plain=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.italic=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.bold=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.bolditalic=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.plain=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.italic=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.bold=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.bolditalic=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.italic=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.bold=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.bolditalic=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.plain=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.italic=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.bold=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.bolditalic=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.plain=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

#fontset.default=
#-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso10646-1,
#-tlc-song-medium-r-normal--*-%d-*-*-c-*-gbk-0

fontset.default=
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

appendedfontpath=/usr/share/fonts/zh_CN/TrueType
然后编辑/etc/profile文件设置环境变量JAVA_FONTS为中文TrueType字体所在目录
export JAVA_FONTS=/usr/share/fonts/zh_CN/TrueType
最后使profile生效,然后重起tomcat
应该就OK啦