字型结构描述如图58所示
字型属性说明见表44。
名称 | 类型 | 说明 | 备注 | 章节 |
---|---|---|---|---|
ID | ST_ID | 不能与已有标识重复 | 必须 | |
FontName | string | 字型名 | 必须 | |
FamilyName | string | 字型族名,用于匹配替代字型 | 可选 | |
Charset | string | 字型适用的字符分类,用于匹配替代字型 可取值为 symbol、prc、big5、unicode 等 默认值为 unicodc |
可选 | |
Serif | boolean | 是否是带衬线字型,用于匹配替代字型默认值是false | 可选 | |
Bold | boolean | 是否是粗体字型,用于匹配替代字型默认值是false | 可选 | |
Italic | boolean | 是否是斜体字型,用于匹配替代字型默认值是false | 可选 | |
FixedWidth | boolean | 是否是等宽字型,用于匹配替代字型默认值是false | 可选 | |
FontFile | ST_Loc | 指向内嵌字型文件,嵌人字型文件应使用OpcnTypc格式 | 可选 |
参考XML如下:
<?xml version="1.0" encoding="utf-8"?>
<ofd:Res xmlns:ofd="http://www.ofdspec.org/2016" BaseLoc="Res">
<ofd:DrawParams>
<ofd:DrawParam ID="1" LineWidth="0.25">
<ofd:StrokeColor Value="0 0 0"/>
</ofd:DrawParam>
</ofd:DrawParams>
<ofd:Fonts>
<ofd:Font ID="5" FontName="楷体" FamilyName="楷体"/>
<ofd:Font ID="6" FontName="宋体"/>
<ofd:Font ID="7" FontName="Courier New"/>
<ofd:Font ID="8" FontName="黑体"/>
<ofd:Font ID="9" FontName="Times New Roman"/>
</ofd:Fonts>
</ofd:Res>
文字对象结构如图59所示
文字对象属性明见表45。
名称 | 类型 | 说明 | 备注 | 章节 |
---|---|---|---|---|
ID | ST_ID | 不能与已有标识重复 | 必选 | |
Font | St_RefID | 引用资源文件中定义的字型的标识 | 必选 | |
Boundary | ST_Box | 矩形边界 | 必选 | eg: 0 0 210 297 |
TextCode | string | 文字内容,也就是一段字符编码串 如果字符编码不在XML编码方式的字符范围之内,应采用“\”加四位十六进制数的格式转义; 文字内容中出现的空格也需要转义若TextCode作为占位符使用时,一律采用“”u00A4)占位 |
必选 | 11.3 文字定位 |
Size | double | 字号,单位为毫米 | 可选 | |
Stroke | boolean | 是否勾边默认值为默认值为false | 可选 | |
Fill | boolean | 是否填充默认值为默认值是true | 可选 | |
HScale | double | 字型在水平方向的放缩比 默认值为 1.0 例如:当HScalc值为0.5时表示实际显示的字宽为原来字宽的一半 |
可选 | |
ReadDirection | int | 阅读方向,指定了文字排列的方向,描述见11.3文字定位 默认值为0 |
可选 | |
CharDirection | int | 字符方向,指定了文字放置的方式,具体内容见11.3文字定位 默认值为 0 |
可选 | |
Weight | int | 文字对象的粗细值;可选取值为100,200,300,100,500,600,700,800,900 默认值为400 |
可选 | |
Italic | boolean | 是否是斜体样式 默认值为false |
可选 | |
FillColor | CT_Color | 填充颜色 默认为黑色 |
可选 | 8.3.2基本颜色 |
StrokeColor | CT_Color | 勾边颜色 默认为透明色 |
可选 | 8.3.2基本颜色 |
CGTransform | CT_CGTransform | 指定字符编码到字符索引之间的变换关系,描述见11.4 字符变换 | 可选 | 11.4 字符变换 |
文字对象示例:
<ofd:TextObject ID="6"Font="2"Size="25.4" Boundary="50 20 112 26">
<ofd:TextCode X="0"Y="25" DeltaX="14 14 14">
Font
</ofd:TextCode>
<ofd:TextCode X="60"Y="25"DeltaX="25">
字体 </ofd:TextCode>
</ofd:TextObject>
当 Font 为“宋体”时,上述示例的显示效果如图 50 所示。
图 50 字体为宋体时显示效果(示意图)
文字对象使用了严格的字型定位信息,字型定位结构如图 61 所示。
** 图61 字型定位结构**
字型定位属性说明见表 46。
名称 | 类型 | 说明 | 备注 | 章节 |
---|---|---|---|---|
X | double | 第一个字型绘制点在对象坐标系下的 X 坐标。当 X 不出现,则采用上一个 TextCode 的 X 值。 文字对象中的第一个TextCode 的 X 属性必需 |
可选 | |
Y | double | 第一个字型绘制点在对象坐标系下的 y 坐标。当 Y 不出现,则采用上一个 TextCode 的 Y 值。 文字对象中的第一个TextCode 的 Y 属性必需 |
可选 | |
DeltaX | Array | double 型数值队列,队列中的每个值代表后一个字型与前一个字型之间在 X 方向的偏移值。 DeltaX 不出现时,表示字型的绘制点在 X 方向不做偏移。 具体描述见 11.4 字型变换 |
可选 | |
DeltaY | Array | double 型数值队列,队列中的每个值代表后一个字型与前一个字型之间在 Y 方向的偏移值。 DeltaY 不出现时,表示字型的绘制点在 Y 方向不做偏移。 具体描述见 11.4 字型变换 |
可选 |
X、Y、DeltaX 和 DeltaY 相结合确定了 TextCode 中对应的每个字型原点的精确位置,上述属性的定位机制如图 62 所示:
图62 文字定位机制图
CharDirection与ReadDirection规定了文字显示时的排列方向。CharDirection指定了单个文字绘制方向,也就是文字的基线方向,用从x轴正方向顺时针到字型基线的角度表示。ReadDirection指定了阅读方向,用从x轴正方向顺时针到文字排列方向的角度表示。这二者的数值规定见表47。
表47 文字排列方向、阅读方向说明
CharDirection值 | 定义 |
---|---|
0 | 默认值,以’A’为例子,显示效果为 |
90 | 字型顺时针旋转90度,以’A’为例子,显示效果为 |
90 | 字型顺时针旋转180度,以’A’为例子,显示效果为 |
90 | 字型顺时针旋转270度,以’A’为例子,显示效果为 |
ReadDirection | 定义 |
---|---|
0 | 默认值,从左往右阅读,以字符串”ABC”为例CharDirection为0,显示效果为 |
90 | 从上往下阅读,以字符串”ABC”为例,CharDirection为0,显示效果为 |
180 | 从右往左阅读,以字符串”ABC”为例,CharDirection为0,显示效果为 |
270 | 从下往上阅读,以字符串”ABC”为例,CharDirection为0,显示效果为 |
ReadDirection等于90时的字型定位如图63所示
图63 阅读方向机制A
等宽字体进行竖排时,起绘点在X方向上无变化的,可省略DeltaX属性。 ReadDirection等于180时的字型定位如图54示。
图64 阅读方向机制B
不同字符方向下的绘制点如图65所示
图65 字符绘制点
当存在字形变换时,TextCode 对象中使用字形变换节点(CGTransform)描述字符编码和字形索引之间的关系,该节点结构如图66所示。
图66 字形变换结构
字形变换属性说明见表48
表 48 字形变换属性
名称 | 类型 | 说明 | 备注 | 章节 |
---|---|---|---|---|
CodcPosition | int | TcxtCodc中字符编码的起始位置,从0开始 | 必选 | |
CodcCount | int | 变换关系中字符的数量,该数值应大于或等于1,否则属于错误描述默认为1 | 可选 | |
GHlyphCount | int | 变换关系中字形索引的个数,该数值应大于或等于1,否则属于错误描述,默认为1 | 可选 | |
Glyphs | Array | 变换后的字形索引列表 | 必选 |
字形的索引跟具体的字型文件紧密相关,同一个字符或字形在不同的字型文件中的索引值并不一样,因此当使用到字形变换时,宜将对应的字型文件嵌入到版式文档中。
字符编码到字符之间主要包括一对一、多对一、一对多以及多对多四种变换关系。
当一个字符对应一个字形时,如果文本对象使用非内嵌字型,则根据该字型的CMAP表取得相应的字形。如果文字使用的是内嵌字型,则使用该内嵌字型数据中的CMAP表来取得字形索引。
多个字符对应一个字符的情况描述如图67所示。
上图是一个常用的英文连写示例,在例子中,f和l字符在显示的时候被一个的连字符所代替,2个字符(0066和006C)对应为1个字形(192)。
一个字符对应多个字形的情况描述如图68所示
上图是一个泰文文字的例子,例子中1个字符(0E33)对应2个字形(124和181)
多个字符对应多个字符的情况描述如图69所示
上图是一个泰米尔文字的例子,例子中2个泰米尔字符(OBAA和OBCB)在有些字型中对应3个字形(34、76和88)。
多对多渲染效果如图70所示。
参考XML如下:
<ofd:TextObject Boundary="31.75 25.214 137.22 4.758" Font="5" Size="3.881" ID="14" Stroke="false" CTM="1 0 0 1 0 0">
<ofd:FillColor Value="0 0 0"/>
<ofd:CGTransform CodeCount="71" CodePosition="0" GlyphCount="71">
<ofd:Glyphs>3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3</ofd:Glyphs>
</ofd:CGTransform>
<ofd:TextCode X="0" Y="3.881" DeltaX="g 10 1.93252 1.9364 g 20 1.93252 1.93639 1.93253 1.9325 1.93253 1.9325 1.93253 1.9325 1.93253 1.9325 1.93253 1.9325 1.93253 1.9325 1.93253 1.9325 1.93253 g 6 1.93252 1.93639 g 16 1.93252">#######################################################################</ofd:TextCode>
</ofd:TextObject>