|
Ada
|
 |
« 於: 2004-06-01 18:19 » |
|
最近研究了一下 RRD Tool 這個工具,並蒙 abelyang 提供其修改過的 RRDTool 中文化版本,在此將建置的經驗分享給各位網友參考。 前置準備:系統要先安裝以下套件,請注意必須連同標頭檔一併安裝。在 Gentoo 上在 emerge 時即會直接將相關標頭檔一併安裝;若使用的是 RedHat 系列時則必須連同對應的 -devel 套件包。倘若必須自行 make 的話,則請注意必須指定安裝路徑如下: freetype2 --prefix=/usr gd-2.0.12 --prefix=/usr/local libiconv --prefix=/usr/local
若一時找不到那邊可以下載時,可利用 abelyang 整理的 tar gzip 包包。http://211.72.210.251/all_need_by_rrd.tgz 另外請一併安裝由發行套件所提供的字型檔案,Gentoo 上是 emerge media-fonts/arphicfonts 這個字形套件;RedHat 上則是 ttfonts-zh_TW-2.11-19.noarch.rpm 或 ttfonts-zh_TW-2.11-19.386.rpm 套件包。 下載 rrdtool 套件: 要輸出中文訊息的話,就必須使用 abelyang 修改過的 rrdtool ,您可在 http://211.72.210.251/rrdtool-big5.tar.gz 處取得。 若您使用 Gentoo Linux: [list=1] - 自行建立 gnroff 的 soft link
ln -s /usr/bin/nroff /usr/bin/gnroff
- 修改 perl-piped 及 perl-shared 目錄下的 Makefile, 將 perl 版本別 (5.8.0) 改為系統上的狀態,例如在我的系統上必須改成 5.8.2。
- 修改 perl-piped 及 perl-shared 目錄下的 Makefile, 將 i386-linux-thread-multi 改為系統上的狀態,例如在我的系統上必須修改為i686-linux。
- 修改 gd1.3/gd.c 中字型檔位置,看是要直接複製一份 bkai00mp.ttf 字形檔到 /usr/share/fonts/zh_TW/TrueType 下,或是修改 gd1.3/gd.c 程式,將
gdImageStringTTF(im,&brect[0], color, "/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf",12,0.0,x-2,y+10,UTF8_String((char *)s)); 改為gdImageStringTTF(im,&brect[0], color, "/usr/share/fonts/ttf/zh_TW/bkai00mp.ttf",12,0.0,x-2,y+14,UTF8_String((char *)s));
- 不要作 ./configure ,直接在 rrdtool 目錄下 make clean; make; make install
- 執行 rrdtool 看看有沒有安裝成功?成功後快試試看能不能輸出中文訊息吧。
[/list:o]
若您使用 RedHat Linux (已在 RHEL 3 WS 及 RedHat 9 上測試過): [list=1] - 修改 perl-piped 及 perl-shared 目錄下的 Makefile, 將 perl 版本別改為系統上的狀態。
- 修改 perl-piped 及 perl-shared 目錄下的 Makefile, 將 i386-linux-thread-multi 改為系統上的狀態。
- 不要作 ./configure ,直接在 rrdtool 目錄下 make clean; make; make install
- 執行 rrdtool 看看有沒有安裝成功?成功後快試試看能不能輸出中文訊息吧。
[/list:o] 依以上的經驗,可以推斷 若使用其他發行套件時: [list=1] - 確認相依性套件是否已安裝,特別是輔助的標頭檔部份。
- 確認 perl-piped 及 perl-shared 中的 Perl 相關目錄及版本設定與當前系統相符。
- 確認字形安裝路徑,視情形修改 gd.c 中的路徑位置。
- 若想更改成非 Big5 碼系統時,則必須額外確認以下事項:
[list=a] - 安裝對應的字形檔名。
- 修改 gd1.3/gd.c 中的字型檔路徑與檔名。
- 修改 gd1.3/gd.c 中編碼的名稱,例如希望改成簡體中文 GB2312 碼時,即將
cd=iconv_open("UTF-8","BIG5"); 改為cd=iconv_open("UTF-8","GB2312"); [/list:o] [/list:o]
|
|
|
|
|
已記錄
|
|
|
|
|
abelyang
|
 |
« 回覆文章 #1 於: 2004-06-02 13:16 » |
|
gdImageStringTTF(im,&brect[0], color, "/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf",12,0.0,x-2,y+10,UTF8_String((char *)s)); 解釋一下這個部份. 字型(bkai00mp.ttf) 可以自己改成想要的 TTF 檔, 12 是字體大小 0.0 是文字輸出時的角度 x-2 是圖例欄的位置, y+10 改成 y+12 或 y+13 or y+14 較好, 如此字距才會夠 UTF8 則是轉碼,用 GB 則就如 ada 兄所提的方式即可
|
|
|
|
|
已記錄
|
|
|
|
|
梁楓
|
 |
« 回覆文章 #2 於: 2004-06-02 14:42 » |
|
哇! 贊贊!
我還在想中文出不來怎麼辦...
|
|
|
|
|
已記錄
|
|
|
|
|
Ada
|
 |
« 回覆文章 #3 於: 2004-06-02 18:05 » |
|
gdImageStringTTF(im,&brect[0], color, "/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf",12,0.0,x-2,y+10,UTF8_String((char *)s)); 解釋一下這個部份. 字型(bkai00mp.ttf) 可以自己改成想要的 TTF 檔, 12 是字體大小 0.0 是文字輸出時的角度 x-2 是圖例欄的位置, y+10 改成 y+12 或 y+13 or y+14 較好, 如此字距才會夠 UTF8 則是轉碼,用 GB 則就如 ada 兄所提的方式即可 大驚~~~ 我一直以為 y 是指行距,所以目前是改成 y+14,現在仔細的瞧了瞧... 呃... 好像真的是字距耶... @@!!
|
|
|
|
|
已記錄
|
|
|
|
|
abelyang
|
 |
« 回覆文章 #4 於: 2004-06-02 18:42 » |
|
字輸出 12 的字型... 若 y+10 則字太近 .. y+12 以上才會理,這是我沒寫好的地方...
|
|
|
|
|
已記錄
|
|
|
|
jet0202ttt
可愛的小學生

文章: 7
|
 |
« 回覆文章 #5 於: 2004-08-31 10:31 » |
|
你好 : 環境 Fedora Linux 好不容易中文化了, 但星期顯示有問題... 如下圖所示 =>  謝謝你的幫忙 ..........
|
|
|
|
|
已記錄
|
|
|
|
|
abelyang
|
 |
« 回覆文章 #6 於: 2004-08-31 10:45 » |
|
沒看到圖, 不過猜想,星期顯示有問題是因為你的 locale 請設成 zh_TW.Big5 即可,若不是再來看看是何原因囉
|
|
|
|
|
已記錄
|
|
|
|
jet0202ttt
可愛的小學生

文章: 7
|
 |
« 回覆文章 #7 於: 2004-08-31 13:41 » |
|
已經OK了 !!!!!!!! 謝謝大大你的熱心幫助
|
|
|
|
|
已記錄
|
|
|
|
|
cjp
|
 |
« 回覆文章 #8 於: 2004-09-02 15:22 » |
|
請問各位... RRD安裝在WINDOWS2000下圖形要如何顯示中文?
|
|
|
|
|
已記錄
|
|
|
|
|
abelyang
|
 |
« 回覆文章 #9 於: 2004-09-02 15:39 » |
|
這我不知道~我不懂 windows programing , 看看有沒有人願意 porting , 大概需要的動作就和我那樣差不多吧
|
|
|
|
|
已記錄
|
|
|
|
cwinl
可愛的小學生

文章: 12
|
 |
« 回覆文章 #10 於: 2004-12-21 12:25 » |
|
我下不到http://211.72.210.251/rrdtool-big5.tar.gz 这个包了 麻烦您能再放上去吗?
谢谢!
|
|
|
|
|
已記錄
|
|
|
|
|
abelyang
|
 |
« 回覆文章 #11 於: 2004-12-21 12:30 » |
|
一直都在... 你是大陸來的朋友吧... 找個 proxy 再試看看
|
|
|
|
|
已記錄
|
|
|
|
cwinl
可愛的小學生

文章: 12
|
 |
« 回覆文章 #12 於: 2004-12-22 10:11 » |
|
哦 才知道 昨天也怀疑是这个问题了
谢谢!
|
|
|
|
|
已記錄
|
|
|
|
cwinl
可愛的小學生

文章: 12
|
 |
« 回覆文章 #13 於: 2004-12-22 11:01 » |
|
我下了那个包 在RH9下安装 我的locale是zh_CN:GB2312 按要求安装了需要的包和修改了source make clean;make;make install 但生成的图有问题 没有文字 我保证字体文件是存在的 而且我通过修改source使它分别指向了zh_CN和zh_TW的truetype字体文件 可问题依旧 下面附上我生成的一个图  我生成图的脚本如下: #! /bin/bash RRD=/usr/local RRD_FILE=/xxx/zhcn.rrd IMAGE=/xxx $RRD/bin/rrdtool graph $IMAGE/forum-hour-zhcn.png \ --title "forum" \ DEF:t1=$RRD_FILE:total:AVERAGE \ DEF:t2=$RRD_FILE:reg:AVERAGE \ DEF:t3=$RRD_FILE:guest:AVERAGE \ COMMENT:"\n" \ COMMENT:"Statistic:---Max---Avg---Min---Now\n" \ AREA:t1#00cc00:"Total" \ GPRINT:t1:MAX:" %4.0lf" \ GPRINT:t1:AVERAGE:"%4.0lf" \ GPRINT:t1:MIN:"%4.0lf" \ GPRINT:t1:LAST:"%4.0lf\n" \ LINE1:t2#0000ff:"Reguser" \ GPRINT:t2:MAX:"%4.0lf" \ GPRINT:t2:AVERAGE:"%4.0lf" \ GPRINT:t2:MIN:"%4.0lf" \ GPRINT:t2:LAST:"%4.0lf\n" \ LINE1:t3#aa0000:"Guests" \ GPRINT:t3:MAX:" %4.0lf" \ GPRINT:t3:AVERAGE:"%4.0lf" \ GPRINT:t3:MIN:"%4.0lf" \ GPRINT:t3:LAST:"%4.0lf\n" \ COMMENT:"\n" \ COMMENT:"\n" \ COMMENT:" Last Updated: $now\n" \ COMMENT:" Maintainer: cwinl\n" \ -v "[ hour onlines ]" -M -U 10 \ -c BACK#d3d8ab \ -Y -h 200 -w 480 -s `date -d "-1 $t" +%s` -b 1024
|
|
|
|
|
已記錄
|
|
|
|
|
abelyang
|
 |
« 回覆文章 #14 於: 2004-12-22 11:17 » |
|
你再找找,上面的動做你缺少了什麼... 我確定來自大陸的朋友是可以裝成功的 (GB2312) 但不知道你少了什麼動作
|
|
|
|
|
已記錄
|
|
|
|
cwinl
可愛的小學生

文章: 12
|
 |
« 回覆文章 #15 於: 2004-12-22 13:07 » |
|
奇怪的是: -v参数是可以写出东西的,其他就都写不出来
我在debian下装了一下,也是同样的问题 能是iconv的问题吗?或者是perl的问题
|
|
|
|
|
已記錄
|
|
|
|
ihweb
可愛的小學生

文章: 3
|
 |
« 回覆文章 #16 於: 2005-01-25 14:31 » |
|
我的作业系统是 FreeBSD,也很想用中文。
请教:为什么不能用./configure 呢?
一、我的 prefix 不是 default 的,我一般都安装在其他地方的。
二、作业系统不一样,也应该要 ./configure 吧? :oops: :oops: :oops:
麻烦 各位前辈了。
|
|
|
|
|
已記錄
|
|
|
|
ihweb
可愛的小學生

文章: 3
|
 |
« 回覆文章 #17 於: 2005-01-25 15:05 » |
|
编译的时候,缺少 iconv.h
从系统 cp 一个过来,make 也不成功。
|
|
|
|
|
已記錄
|
|
|
|
ihweb
可愛的小學生

文章: 3
|
 |
« 回覆文章 #18 於: 2005-01-25 15:17 » |
|
更换 iconv.h 编译出现:
In file included from rrd_tool.h:37, from rrd_cgi.c:7: /usr/include/stdlib.h:110: warning: ANSI C does not support `long long' /usr/include/stdlib.h:114: warning: ANSI C does not support `long long' rrd_cgi.c:253: warning: no previous prototype for `rrdstrip' rrd_cgi.c:443: warning: no previous prototype for `scanargs' /bin/sh ../libtool --mode=link gcc -g -O2 -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -fPIC -o rrdcgi rrd_cgi.o librrd.la -lm gcc -g -O2 -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -fPIC -o rrdcgi rrd_cgi.o .libs/librrd.a -lm -lm -lm -lm -lm -lm .libs/librrd.a(gd.o): In function `gdImageString': /ServerInstall/RRDtool/rrdtool-1.0.42/gd1.3/gd.c(.text+0xc7d): undefined reference to `gdImageStringTTF' .libs/librrd.a(gd.o): In function `UTF8_String': /ServerInstall/RRDtool/rrdtool-1.0.42/gd1.3/gd.c(.text+0xcb6): undefined reference to `iconv_open' /ServerInstall/RRDtool/rrdtool-1.0.42/gd1.3/gd.c(.text+0xd06): undefined reference to `iconv' /ServerInstall/RRDtool/rrdtool-1.0.42/gd1.3/gd.c(.text+0xd15): undefined reference to `iconv_close' *** Error code 1
Stop in /ServerInstall/RRDtool/rrdtool-1.0.42/src. *** Error code 1
Stop in /ServerInstall/RRDtool/rrdtool-1.0.42.
|
|
|
|
|
已記錄
|
|
|
|
|
abelyang
|
 |
« 回覆文章 #19 於: 2005-06-10 17:03 » |
|
我的作业系统是 FreeBSD,也很想用中文。
请教:为什么不能用./configure 呢?
一、我的 prefix 不是 default 的,我一般都安装在其他地方的。
二、作业系统不一样,也应该要 ./configure 吧? :oops: :oops: :oops:
麻烦 各位前辈了。 從前沒注意看這個問題.. 你的解法在於你了不了解 Makefile 語法 如果懂的話,只要修一下 Makefile 即可 但前題是一個要先裝好 freetype2/gd/iconv 再對照 -L -l -I 等 gcc 參數下去改
|
|
|
|
|
已記錄
|
|
|
|
|
abelyang
|
 |
« 回覆文章 #20 於: 2005-06-10 17:05 » |
|
rrdtool 1.2.8 中文化 Patch , 若不懂 patch 請先研究用法 我只試過 1.2.8 , >1.2.8 適不適用否我就不知了 Patch 處都做了注解,方便有需要研究的人 新版的 rrd (1.2.x) 調用 FT (freetype2) 做 TTF 輸出 所以程式用 1.0.x 版完全不能適用哦,切記 diff -u rrdtool-1.2.8/src/rrd_gfx.c rrdtool-1.2.8-big5/src/rrd_gfx.c --- rrdtool-1.2.8/src/rrd_gfx.c Fri Jun 10 16:54:58 2005 +++ rrdtool-1.2.8-big5/src/rrd_gfx.c Fri Jun 10 16:45:42 2005 @@ -378,6 +378,9 @@ unsigned int n; int error; int gottab = 0; + // 雙字元處理 multi-bytes 問題 + wchar_t* w_text; + ft_pen.x = 0; /* start at (0,0) !! */ ft_pen.y = 0; @@ -391,6 +394,11 @@ string->transform.xy = (FT_Fixed)(-sin(M_PI*(rotation)/180.0)*0x10000); string->transform.yx = (FT_Fixed)( sin(M_PI*(rotation)/180.0)*0x10000); string->transform.yy = (FT_Fixed)( cos(M_PI*(rotation)/180.0)*0x10000); + // pointer malloc + w_text = (wchar_t) calloc (string->count,sizeof(wchar_t)); + // 轉換為 wide 型式 + mbstowcs(w_text,text,string->count); + use_kerning = FT_HAS_KERNING(face); previous = 0; @@ -419,8 +427,8 @@ glyph->pos.x = 0; glyph->pos.y = 0; glyph->image = NULL; - - glyph->index = FT_Get_Char_Index( face, letter ); + // 字符隻轉換 + glyph->index = FT_Get_Char_Index( face, w_text[n]); /* compute glyph origin */ if ( use_kerning && previous && glyph->index ) { @@ -495,6 +503,8 @@ } */ string->height = string->bbox.yMax - string->bbox.yMin; + free(w_text); + return string; } diff -u rrdtool-1.2.8/src/rrd_graph.c rrdtool-1.2.8-big5/src/rrd_graph.c --- rrdtool-1.2.8/src/rrd_graph.c Fri Jun 10 16:54:58 2005 +++ rrdtool-1.2.8-big5/src/rrd_graph.c Fri Jun 10 16:36:04 2005 @@ -2793,7 +2793,9 @@ tzset(); #endif #ifdef HAVE_SETLOCALE - setlocale(LC_TIME,""); + //setlocale(LC_TIME,""); + // 可以不定 locale , 由系統自動判斷 + setlocale(LC_ALL,"zh_TW.BIG5"); #endif im->yorigin=0; im->xorigin=0;
|
|
|
|
|
已記錄
|
|
|
|
suss
可愛的小學生

文章: 2
|
 |
« 回覆文章 #21 於: 2005-11-02 09:31 » |
|
进行make时,总是出现tcl.h找不到,怎么回事?
|
|
|
|
|
已記錄
|
|
|
|
|
Ada
|
 |
« 回覆文章 #22 於: 2006-04-26 00:23 » |
|
自從發表了 rrdtool 中文輸出心得後,一直沒注意 rrdtool 的發展(一方面是 Gentoo 的限制),然後 rrdtool 就從 1.0.x 版升級到 1.2.x 啦... 可惜官方版本還是不能繪製中文...  為了能在 Gentoo Linux 上使用 RRDTool 繪製中文,我參照 abelyang 的 patch 修改了 rrdtool-1.2.12-r1.ebuild 這個 EBuild 檔,似乎可以完成編譯(但是有一堆 warning... )、可以將資料寫入 RRD、當然也可以繪製含中文字的圖形,有需要的人可以捉回去試試!※2007-12-26 補充:其實 rrdtool 自 1.2.15 版起就可以支援 UTF-8 中文(其他編碼沒試過)輸出了,不再需要做相關 patch 動作。 ※注意事項: - 我的平台是 UTF-8 環境,所以我選擇使用自動偵測語系設定的方式而非強制指定。
- 兩個 patch 檔目前放在個人的 blog 主機上,如果無法下載的話請稍候再試。
- 如果看不到字或出現框框字,那表示 rrdgraph 看到的中文字編碼與 LC_ALL 指定的不一樣!請檢查 rrdtool graph 指令檔和 locale 設定。
範例如下,我使用的是 CWTTF 的仿宋體輸出: 
|
|
|
|
« 最後編輯時間: 2007-12-26 09:33 由 Ada »
|
已記錄
|
|
|
|
|