提交者: 商 云方
新增日期: 2017-06-26 01:04:38
//===================================================
// CLASS GanttActivityInfo
// Description:
//===================================================
class GanttActivityInfo {
public $iShow=true;
public
$iLeftColMargin=4,$iRightColMargin=1,$iTopColMargin=1,$iBottomColMargin=3;
public $vgrid = null;
private $iColor='black';
private $iBackgroundColor='lightgray';
//private
$iFFamily=FF_FONT1,$iFStyle=FS_NORMAL,$iFSize=10,$iFontColor='black';
private
$iFFamily=FF_CHINESE,$iFStyle=FS_NORMAL,$iFSize=10,$iFontColor='black';
jpgraph_gantt.php 文件中:
//===================================================
// CLASS TextProperty
// Description: Holds properties for a text
//===================================================
class TextProperty {
public $iShow=true;
public $csimtarget='',$csimalt='';
private $iFFamily=FF_FONT1,$iFStyle=FS_NORMAL,$iFSize=10;
private $iColor="black";
private $iText="";
private $iHAlign="left",$iVAlign="bottom";
甘特图上用的字体是FF_FONT1,把使用FF_FONT1
的地方改成FF_CHINESE
提示错误,缺乏黑体对应的字体文件:
FF_CHINESE => array(FS_NORMAL=>CHINESE_TTF_FONT, FS_BOLD=>'',
FS_ITALIC=>'', FS_BOLDITALIC=>'' ) 改成:
FF_CHINESE => array(FS_NORMAL=>CHINESE_TTF_FONT, FS_BOLD=>'simhei.ttf',
FS_ITALIC=>'simhei.ttf', FS_BOLDITALIC=>'simhei.ttf' ),
jpgraph.php中:
//===================================================
// CLASS TTF
// Description: Handle TTF font names
//===================================================
class TTF {
private $font_files,$style_names;
//---------------
FF_CHINESE => array(FS_NORMAL=>CHINESE_TTF_FONT,
FS_BOLD=>CHINESE_TTF_FONT, FS_ITALIC=>'', FS_BOLDITALIC=>'' ),
}
CHINESE_TTF_FONT 定义在 jpg-config.inc.php 中:
DEFINE('CHINESE_TTF_FONT','simsun.ttc');
而该文件的目录也是在jpg-config.inc.php中定义的:
DEFINE("TTF_DIR", GFConf::get('system.trueTypeDir'));
而 system.trueTypeDir 是在 gforge.conf 中定义的。
我们只需要把 甘特图默认的使用的字体 FF_FONT1 的FS_NORMAL
指向CHINESE_TTF_FONT就好了。而在jpgraph.php中是这么定义
FF_FONT1和FF_CHINESE的
DEFINE("FF_FONT1",2);
DEFINE("FF_CHINESE",31);
在function
convert中打日志,发现输出到日志中的文本中文显示正常,但所有中文的文本都走了else
,而没有走
$aFF === FF_CHINESE, 所以这是关键,
function Convert($aTxt,$aFF) {
if( LANGUAGE_CYRILLIC ) {
if( CYRILLIC_FROM_WINDOWS ) {
$aTxt = convert_cyr_string($aTxt, "w", "k");
}
$isostring = convert_cyr_string($aTxt, "k", "i");
$unistring = LanguageConv::iso2uni($isostring);
return $unistring;
}
elseif( $aFF === FF_SIMSUN ) {
// Do Chinese conversion
if( $this->g2312 == null ) {
include_once 'jpgraph_gb2312.php' ;
$this->g2312 = new GB2312toUTF8();
}
return $this->g2312->gb2utf8($aTxt);
}
elseif( $aFF === FF_CHINESE ) {
if( !function_exists('iconv') ) {
JpGraphError::RaiseL(25006);
//('Usage of FF_CHINESE (FF_BIG5) font family requires that your PHP setup
has the iconv() function. By default this is not compiled into PHP (needs the
"--width-iconv" when configured).');
}
//return iconv('BIG5','UTF-8',$aTxt);
error_log("Enter function convert
==FF_CHINESE".$aTxt."\n", 3,
"/tmp/php_graph_err.log");
return $aTxt;
}
else
error_log("Enter function convert else aFF=".$aFF." and
aTxt=".$aTxt."\n", 3, "/tmp/php_graph_err.log");
return $aTxt;
}
error_log(date(str.”\n”, 3, "/tmp/php_graph_err.log");
==========
日志打出来发现,显示中文内容时,都走到else 中去了,aff=5
或者2 ,不是我们想要的的FF_CHINESE (30)
Title的字体是 jpgraph_gantt.php 中的 SetSimpleFont
决定的,这是一个公共函数,应该是外面程序调用的。
在/opt/gforge5/lib/graphics/GraphicPie.php中改字体
//$font_prop = $this->Language->getFontProperties(FF_FONT2, FS_BOLD, 12);
$font_prop = $this->Language->getFontProperties(FF_CHINESE, FS_BOLD, 12);
设日志发现根本没运行到这个文件;
/opt/gforge5/plugins/tracker/wwwlib/graphs/GanttGraph.php
中更改字体(从FF_FONT1 改成 FF_CHINESE)
这个更改针对甘特图起作用了。
=========
总结:
1、在 gforge.conf 中定义 TrueTypeDir
字体文件目录,把中文字体文件 simsun.ttc 传到该目录下;
2、在jpg-config.inc.php中定义
目录常量 DEFINE("TTF_DIR",
GFConf::get('system.trueTypeDir'));
字体文件 DEFINE('CHINESE_TTF_FONT','simsun.ttc');
该文件对应
3、jpgraph.php中定义中文字体常量 FF_CHINESE =>
array(FS_NORMAL=>CHINESE_TTF_FONT, FS_BOLD=>CHINESE_TTF_FONT,
FS_ITALIC=>'', FS_BOLDITALIC=>'' )
4、因为数据库存储的是UTF-8编码,所以在针对中文的语言的convert()时,不要做任何转换。这通过更改jpgraph.php中的convert()函数实现;
5、更改甘特图程序主程序,让其使用中文字体:/opt/gforge5/plugins/tracker/wwwlib/graphs/GanttGraph.php
中更改字体(从FF_FONT1 改成 FF_CHINESE)
这个更改针对甘特图起作用了。
同理更改: /opt/gforge5/wwwlib/my/gantt/GanttGraph.php
/opt/gforge5/wwwlib/my/pjgantt/GanttGraph.php
/opt/gforge5/wwwlib/project/graphs/DiskUsage.php
/opt/gforge5/lib/graphics/GraphicPie.php
/opt/gforge5/plugins/frs/wwwlib/graphs/DownloadsByMonth.php
|