http://www-900.ibm.com/developerWorks/cn/wsdd/library/techarticles/yangyaping0307/waslinux.shtml 出現這個問題的主要原因是SUN的JDK中默認帶的font.properties不適合于" name="description" />

linux平臺上通過jfreechart生成的PNG圖像中顯示的漢字為方框的問題的解決

發表于:2007-05-26來源:作者:點擊數: 標簽:
參考鏈接 http://dev.csdn.net/develop/article/18/18432.shtm was linux .shtml">http://www-900.ibm.com/developerWorks/cn/wsdd/library/techarticles/yangyaping0307/waslinux.shtml 出現這個問題的主要原因是SUN的JDK中默認帶的font.properties不適合于

參考鏈接 http://dev.csdn.net/develop/article/18/18432.shtm

waslinux.shtml">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.<locale>。
該<locale>實際上由<language>_<region>_<encoding>三部分構成。
而<language>、<region>和<encoding>分別對應了系統屬性(由System.getProperty方法返回的字符串)"user.language"、"user.region"和"file.encoding"。
而這個font.properties.<locale>名也可以跟操作系統的版本結合使用。
概括的講,Java按照以下順序搜索字體屬性文件:
font.properties.<language>_<region>_<encoding>.<osVersion>
font.properties.<language>_<region>_<encoding>
font.properties.<language>_<region>.<osVersion>
font.properties.<language>_<region>
font.properties.<language>_<encoding>.<osVersion>
font.properties.<language>_<encoding>
font.properties.<language>_<osVersion>
font.properties.<language>
font.properties.<encoding>.<osVersion>
font.properties.<encoding>
font.properties.<osVersion>
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啦

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97