生成圖表后自動(dòng)生成chart表的問(wèn)題:
我測(cè)試生成圖表中的中文問(wèn)題都解決了,但是每次生成chart圖時(shí)會(huì)報(bào)UTF編碼錯(cuò)誤,從錯(cuò)誤判斷應(yīng)該是某個(gè)文件的編碼錯(cuò)誤,起初根據(jù)錯(cuò)誤判斷是filter的問(wèn)題,可是filter那點(diǎn)代碼中根本不涉及編碼的問(wèn)題.我將很多配置文件的編碼都改了也不行.因?yàn)槟莻€(gè)英文例子沒(méi)問(wèn)題,我查看了JFreechart的一個(gè)servlet(org.jfree.chart.servlet.DisplayChart),因?yàn)閖pviot就是調(diào)用這個(gè)servlet實(shí)現(xiàn)繪圖的,分析這個(gè)servlet我知道它會(huì)在一個(gè)臨時(shí)目錄生成png文件,然后交給servlet寫(xiě)到瀏覽器的響應(yīng)中去,我找到那個(gè)臨時(shí)目錄(tomcattemp),發(fā)現(xiàn)里面已經(jīng)生成了正確的中文圖形.從而判斷圖形生成正確,但是寫(xiě)到瀏覽器中時(shí)出了問(wèn)題.最后我查看能生成英文圖表的那個(gè)例子,發(fā)覺(jué)不僅僅在html中生成圖形,而且生成map.而這個(gè)map的生成全是在程序中做的,程序生成一個(gè)xml文件,通過(guò)chart.xsl解析生成map的最終html代碼.但是在程序中生成時(shí)并沒(méi)有加入編碼設(shè)置,因此問(wèn)題出在生成map這兒.
最終修改代碼如下:
com.tonbeller.jpivot.chart.ChartComponent:
在render函數(shù)中修改如下:
String desc="<?xml version="1.0" encoding="gb2312"?>";
String xchart =desc+"n"+ "<xchart>" + writeImageMap(filename, info, false) + "</xchart>";
這樣就為xchart設(shè)置了編碼.
修改jfreechart中的默認(rèn)字體:
com.tonbeller.jpivot.chart.ChartComponent中定義了幾種字體,但是這幾種字體都是英文字體,我將其修改為宋體:
把所有的字體定義都改為"SimSun"
注意到這兒并沒(méi)有玩,如果你僅僅修改程序,仍舊會(huì)出現(xiàn)問(wèn)題,報(bào)錯(cuò)說(shuō)沒(méi)有適合"SimSun"的item
同時(shí)要修改一個(gè)配置文件:WEB-INFjpivotchartchartpropertiesform.xml
在這個(gè)配置文件中將SimSun加入其中,形式如下:
<listBox1 type="string" modelReference="fontName" label="Title font">
<listItem value="SansSerif" label="SansSerif"/>
<listItem value="Serif" label="Serif"/>
<listItem value="SimSun" label="SimSun"/>
<listItem value="Monospaced" label="Monospaced"/>
</listBox1>