摘要:在之前的php jpgraph安装配置教程中已介绍过jpgraph字体的安装与配置方法,jpgraph类库中字体和文本的使用是非常重要的,jpgraph既可以控 制文本的旋转、对齐方式、字体大小,也可以引入用户需要的自定义字体。通过jpgraph工具类SymChar可以查找相关的特殊字符(比如数学运算符) 以方便图表...
在之前的php jpgraph安装配置教程中已介绍过jpgraph字体的安装与配置方法,jpgraph类库中字体和文本的使用是非常重要的,jpgraph既可以控 制文本的旋转、对齐方式、字体大小,也可以引入用户需要的自定义字体。通过jpgraph工具类SymChar可以查找相关的特殊字符(比如数学运算符) 以方便图表的文本说明。jpgraph类库支持中文、日文、英文等字符编码的配置以适应不同的语言环境。
在开始本教程之前请确保你已安装支持了TTF字体,请参考jpgraph字体安装与配置方法教程。
为了更好的显示质量以及能显示所有字符,建议使用TTF字体而不是Bitmap字体。
jpgraph类库中的所有文件都是UTF-8编码的。
不同类型的字体说明
类库支持两种基本的字体
1、Bitmap字体
有三个内置的Bitmap字体,它们是FF_FONT0,FF_FONT1和FF_FONT2。Bitmap字体的好处是其总是在安装GD后即可使 用。但是Bitmap字体只支持7位ASCII,所以如果你需要显示任何字符是不可能使用Bitmap字体的。可用的Bitmap字体大小也是受限制的, 三个对应的字体,FF_FONT0是最小的字体,FF_FONT2是最大的可用Bitmap字体。
jpgraph字体使用实例:下面的脚本显示了一个典型的Bitmap字体用法
1 2 3 4 5 6 |
<?php $graph = new Graph(....); //调整标题使其使用最大的内置Bitmap字体并加粗 |
2、TTF字体
TTF字体可以使文本得到更好的视觉质量。TTF字体支持所有大小,同时有更多的字体可选择。所有字体系列除了三个Bitmap字体其他都是TTF字体。为了使用这些字体,字体的安装必须按照类库的要求配置。
jpgraph TTF字体使用实例:下面的脚本显示了一个图形标题使用Arial TTF字体的典型用法
1 2 3 4 5 6 |
<?php $graph = new Graph(....); //调整标题大小为14并使用Arial字体同时加粗 |
字体系列和字体类型
默认的TTF字体
3.5版本之前,Bitmap字体是默认使用的,可以指定从FF_FONT0到FF_FONT2。从3.5版本开始,默认字体现在设置为开源TTF
DejaVu字体(FF_DV_SANSSERIF,
DejaVuSans.ttf)。这个TTF字体包含在jpgraph源代码中(src/font),不需要再指定一个字体。
你可以通过改变jpgraph_ttf.inc.php文件中定义的FF_DEFAULT值来改变默认字体。为了使用另一个字体你必须准备好相对应的字体文件。
如果在你的PHP环境配置中不支持FreeType库,可以使用原始的Bitmap字体以保证兼容性。
所有的图形对象使用文本时允许你通过调用SetFont()方法来指定字体,其有三个参数。
1、字体系列。比如Arial,Times roman TTF字体或者当使用Bitmap字体时可以使用中等大小的Bitmap字体。字体系列必须通过前缀FF_来指定。所有支持的字体系列请参考jpgraph英文帮助文档中表8.2支持的Latin字体字体系列规范图。
2、字体样式。即斜体、粗体或粗斜体。默认所有字体样式都是normal样式。字体样式可以通过前缀FS_指定。支持的字体样式
有FS_NORMAL (正常字体样式)、FS_BOLD( 粗体字体样式)、FS_ITALIC (斜体字体样式)、FS_BOLDITALIC
粗斜体样式字体(需要字体系列本身支持才行)
3、字体大小。整数形式并以像素pt为单位
注意:根据系统上安装的DejaVu字体的版本,有两种字体文件的命名约定。jpgraph类库会尝试以这两种命名方式看是否能找到字体文件。
了解文本对齐和锚点
当文本字符串指定的位置是屏幕位置,默认位置是可以获取的字符串边界框的顶部左上角对齐。左上角是文本字符串的锚点。锚点对齐可以通过调用
Text::SetAlignment($aHorAlign, $vertAlign)方法进行调整。两个参数作为文本字符串,可以接受的参数值如下
水平对齐:’left’, ‘center’, ‘right’
垂直对齐:’bottom’, ‘center’ (or ‘middle’) , ‘top’
注意:即使从API的角度来看Bitmap字体和TTF字体,共享相同的用户API接口也是千差万别。内置位图字体和TrueType字体在屏幕上呈现的方式有许多细微的差别。
当添加文本对象至图表中想要获得理想的对齐效果时,手动设置锚点对齐是最有用的。你可以看一个锚点如何变化的实例
jpgraph支持的文本对齐方式效果图
注意:SetAlignment()方法可能看起来很奇怪,其真正意义上使用的是SetAnchor()方法。这是由于命名方案的历史原因造成的。
使用jpgraph旋转文本
Bitmap字体和TTF字体支持不同程度的旋转文本。Bitmap字体可能只能使用水平或垂直的文本,比如0度或90度旋转。TTF字体支持任何角度。
如果你使用Bitmap字体并指定一个0或90度以外的其他角度将会显示错误。
旋转文本最常用的用法是调整X轴标签使他们以45度角度显示。要旋转标签抽需要使用Axis::SetLabelAngle()。
除了标签轴,也可以旋转几乎所有文本对象,除了图表标题,其只能是水平方式向。为了文本对象可以添加到图表上的任意位置,需要使用Text::SetAngle()方法来指定想要的文本角度。另一种常见的地方是当单个数据点都标有标签时文本标签是可旋转的。
注意:当旋转文本段落时,段落内的对齐方式一直都被重设为left。在旋转文本中不可能使用center或right段落对齐方式。
格式化文本段落
jpgraph类库中的文本渲染引擎提供了一些基本的文本段落格式。
1、jpgraph类库支持多行文字作为一段
2、jpgraph类库可以调整段落内文本的对齐方式:左,右或居中调整。
3、如果文本渲染启动将支持自动换行。
所有文字处理都是通过文字处理类(在jpgraph_text.inc.php文件中定义)进行,其可以用来添加任意文本至图表中,也可以在类库内部操作标签和标题上的文本。所有这些文本都是文本类的一个实例。
段落的对齐控制主要通过Text::SetParagraphAlign($aAlignment)方法进行。参数是文本字符串’left’、’right’、’center’之一
jpgraph类库不支持段落中单个字符间字距的对齐。因为这复杂性更高。
段落不同对齐方式的效果图
jpgraph支持的段落不同对齐方式效果图
在文本中插入一个换行符“\n”将导致文本行的换行并开始下一行。请注意,换行符必须用双引号,而不是单引号。
Bitmap字体旋转,比如垂直时不支持自动换行。如果垂直文本需要换行则必须使用TTF字体。
如何添加常用的TTF字体
除了预定义的字体,jpgraph类库可以很方便地使用三个自定义字体。这是通过先指定需要使用的字体文件名称,然后指定
FF_USERFONT1,FF_USERFONT2或FF_USERFONT3字体系列中的一个。安装一个新的字体是通过调用一个或多个方法实现的。
Graph::SetUserFont1($aNormal,$aBold,$aItalic,$aBoldIt) (同名函数 SetUserFont() )
Graph::SetUserFont2($aNormal,$aBold,$aItalic,$aBoldIt)
Graph::SetUserFont3($aNormal,$aBold,$aItalic,$aBoldIt)
这些方法的参数必须是包含完整路径的字体文件名。所有参数除了$aNormal都是可选的。
指定并安装用户指定字体的实例如下
1 2 3 4 5 6 7 8 9 10 11 |
<?php // ... $graph->SetUserFont(‘/usr/share/fonts/ttf/digital.ttf‘); $graph->title->SetFont(FF_USERFONT,FS_NORMAL,12); $graph->title->Set(‘Test title ‘.$pi); // ... ?> |
插入Unicode实体
使用TTF字体的原因之一是可能可以插入Unicode字符/实体。有了这个在西欧键盘上的那些不能正常利用的扩展范围内的字符就可以使用了。
例如,经典的数学符号,例如“PI”的希腊字母。为了使这些和其他常用的特殊字符更容易使用,jpgraph类库提供了一个工具类,可以很容易使用这些字符,而无需每次来查找相应的Unicode实体。
为了指定键盘上那些不能利用的字符常用的方法是指定Unicode代码,文本字符串中需要包含前缀&#。比如Unicode字符pi是十六进
制的03C0,在字符串中你需要写成:这是圆周率PI
π。注意,字符串中给定的十进制编码代码总是使用4位(如果有必要需要预填充0)。由于需要非常乏味的查找特殊字符的编
码,jpgraph类库提供了一种简单的方法,SymChar类。
工具类 SymChar
由于查找所有字符代码的对应值非常乏味,为了简化这些工作,SymChar类允许你通过常用的英文名来找到这些字符。比如,创建一个希腊字符PI,可以这样实现
1 2 3 4 5 6 7 8 |
<?php // ... $pi = SymChar::Get(‘pi‘); $graph->title->Set(‘Test is pi‘.$pi); // ... |
表8.3中列出了SymChar类支持的所有象征性名字对应的实体。
SymChar::Get() 第一个参数应该是实体名称。
字符编码
如果你不使用日本,中国,西里尔文,希腊文或希伯来文的语言,这一节可以跳过。
jpgraph类库的核心问题是其不知道输入的字符串是什么编码。因为TTF字体的需要,所以告诉类库输入的编码是非常有用的,以便类库可以做必要的字符编码转换以产生UTF-8或UTF-16编码。主要支持的语言环境编码选项解释如下。
JpGraph库的文件和默认情况下所有的实例都是UTF-8编码的。
所有下面提到的都可以在jpgraph_ttf.inc.php文件中找到。
日文编码选项
只有一个可能的选项可以指定。
ASSUME_EUCJP_ENCODING true/false 假设已在EUC-JP编码环境下输入日文文字。如果这个定义是真的,那么在jpgraph类库中使用PHP的mbstring库可以自动完成从EUC-JP转换为UTF8的工作。注意,在PHP中的多字节扩展通常不会启用。
否则将假设输入的字符编码使用的是UTF-8。注意,显示日文字符(Kanji, Hiragana and Katakana)必须指定一个日文字体系列(FF_MINCHO, FF_PMINCHO, FF_GOTHIC or FF_PGOTHIC)
中文字符选项
如果字体指定为库内置的FF_SIMSUN,则GB2312将转换为UTF-8。转换表是存储在文件jpgraph_gb2312.inc.php中。
如果字体指定为FF_CHINESE则不会转换,因为假设输入字符串已经是UTF-8,只有改变字体的默认中文字体系列的影响。
如果字体指定为FF_BIG5,那么它是假设输入字符串是BIG5编码的,内部转换为UTF-8编码是通过iconv()函数完成的。这意味着PHP
必须内置支持iconv()。默认情况下,这是不会被编译到PHP中的(Windows中的有些PHP安装版本已经支持了,Unix需要手工编译,需配
置”–width-iconv”)。如果这种方法不存在则jpgraph类库会生成错误消息。
西里尔文编码选项
为了做正确的转换,LANGUAGE_CYRILLIC 必须定义为true,如果你是在多用户环境下运行jpgraph类库,可能需要调整LANGUGAE_CHARSET选项,其定义如下
LANGUAGE_CYRILLIC true/false 是否支持特俗的Unicode西里尔文支持。
CYRILLIC_FROM_WINDOWS true/false 如果你设置为true,则将假定输入的字符编码是Windows1251编码,如果为false将假定为KOI8-R。
LANGUAGE_CHARSET string 这个常量用于自动检测西里尔转换是否真的有必要,如果启用。只要指定使用的编码方式即可,比如“Windows-1251”。
典型的字符串UTF-8或utf-8,这种比较是不区分大小写的。如果字符集不是’koi8-r’或’windows-1251′的衍生字符集则转换不会发生。这个常量在多用户多语言环境下是非常重要的。
用法:
1 2 3 |
<?php define(‘LANGUAGE_CHARSET‘, $locale_char_set); ?> |
$locale_char_set 是一个全局字符串变量。
希腊字符编码选项
为了正确的从希腊文翻译为Unicode,LANGUAGE_GREEK应指定为true
LANGUAGE_GREEK true/false 希腊语言是否支持特殊的Unicode字符
GREEK_FROM_WINDOWS true/false 如果你设置这个定义为true,希腊字符的转换,将假定输入文本是Windows1251。
至此,jpgraph类库对文本字符和字体的控制说明教程就介绍完了,熟悉和掌握字体和文本的控制方法是使用jpgraph绘制图表必不可少的,希望对使用jpgraph的朋友有所帮助。
转载请注明来源:jpgraph中文使用手册之文本和字体控制教程
http://www.php1.cn/Content/jpgraph_ZhongWenShiYongShouCeZhiWenBenHeZiTiKongZhiJiaoCheng.html