页面中的所有图元都在坐标空间内进行描述,一个坐标空间包括坐标原点、坐标轴方向、坐标单位长度三个要素。坐标空间根据用途不同分为设备空间、页面空间、对象空间三类。不同的坐标空间之间通过平移、缩放、旋转、切变进行变换
页面中的内容最终需要输出到某一设备上,而每个设备都会拥有自己的坐标空间以便在绘制区域内能够正确绘制每个图元,设备本身的坐标空间就称之为设备空间。设备空间的原点、轴方向与坐标单位的实际长度都会由于设备不同而有很大的差异,页面的内容不应直接在设备空间上描述。
页面空间是一个与设备无关的坐标空间系统,用来描述图元和其他页面要素。页面空间规定页面的左上角为原点,轴向右增长,Y轴向下增长,以毫米为单位。整个页面空间的大小由PageArea节点(见 7.5文档根节点)中的PhysicalBox确定。页面空间根据原点平移、轴方向变换,、坐标数值变换等来完成到设备空间的变换。其中坐标数值变换就是将图元的长度数据通过设备的分辨率和其他信息换算成设备空间中的像素长度。
图元对象使用其外接矩形属性确定在页面或其他容器中的绘制位置。图元对象的内部数据,包括路径数据和裁剪区数据,都以外接矩形的左上角为坐标原点,X轴向右增长,Y轴向下增长,并采用毫米为单位,这样的局部坐标空间就称为对象空间。绘制图元时,应首先通过外接矩形参数平移到对象空间内,在对象空间内根据变换矩阵和裁剪设置进行相应绘制。
变换矩阵提供了两个坐标空间之间的变换规则,用一个长度为6的一维数组描述,形如“a b c d e f"。变换矩阵是一个3x3的矩阵,其格式是
假设变换前的坐标是(x,y),变换后的坐标是(x',y'),那么满足公式:
x'=ax+cy+e
y'=bx+dy+f
变换矩阵可以实现表20中的几种变换效果,这些效果可以相互迭加,迭加的方式通过矩阵乘法实现,但应按照变换的顺序进行迭加。
例如,先将X轴放大为原来的两倍,然后旋转 π/6,那么最终的变换矩阵是
与先旋转 π:/6再将x轴放大为原来的两倍获得变换矩阵
是不一样的。
矩阵乘法的结果将会作为最终的变换矩阵进行保存。
图元对象数据经过以下步骤完成向设备坐标系统的变换
1.图元对象的数据通过图元的变化矩阵,变换到对象空间
2.对象空间数据通过外接矩形,变换到外部的页面空间
3.页面空间根据页面区域的大小、坐标单位的实际长度、设备信息变换到设备空间
整个变换矩阵 ( M ) 可以表示为:
这个矩阵 ( M ) 就是你需要应用到 CTM 上的,以实现围绕 ( xc, yc ) 的旋转。
绘制参数是一组用于控制绘制渲染效果的修饰参数的集合。绘制参数可以被不同的图元对象所共享。
绘制参数可以继承已有的绘制参数,被继承的绘制参数称为该参数的“基础绘制参数”。绘制参数结构如图22所示。
图元对象通过绘制参数的标识引用绘制参数。图元对象在引用绘制参数的同时,还可以定义自己的绘制属性,图元自有的绘制属性将覆盖其引用的绘制参数中的同名属性。
绘制参数可通过引用基础绘制参数的方式形成嵌套,对单个绘制参数而言,它继承了其基础绘制参数中的所有属性,并且可以重定义其基础绘制参数中的属性
绘制参数属性见表21。
名称 | 类型 | 说明 | 备注 | 章节 |
---|---|---|---|---|
ID | ST_ID | 声明该绘制参数的标识,不能与已有标识重复 | 必须 | |
Relative | ST_RefID | 基础绘制参数,引用资源文件中的绘制参数标识 | 可选 | |
Join | string | 线条连接样式,指定了两个线的端点结合时采用的样式 可取值为: Miter Round Bevel 默认值为 Miter |
可选 | 8.2.2 线条连接样式 |
LineWidth | double | 线宽,非负浮点数,指定了路径绘制时线的宽度。由于某些设备不能输出一个像素宽度的线,因此强制规定当线宽大于 0 时, 无论多小都最少要绘制两像素的宽度;当线宽为 0 时,绘制一个像素的宽度。 由于线宽 0 的定义与设备相关,所以不推荐使用线宽 0。默认值为 0.353(相当于 1 磅) |
可选 | |
DashOffset | double | 虚线重复样式开始的位置,默认值为 0。当 DashPattern 不出现时,该参数无效 | 可选 | 8.2.4 虚线重复样式 |
DashPattern | ST_Array | 虚线的重复样式。默认值为空。虚线样式的控制效果见表 21 | 可选 | 8.2.4 虚线重复样式 |
Cap | string | 线端点样式,枚举值,指定了一条线的端点样式。 可取值为: Butt Round Square 默认值为 Butt |
可选 | 8.2.5 线端点样式 |
MiterLimit | double | Join 为 Miter 时小角度结合长度点的的截断值,默认值为 3.528。当 Join 不等于 Miter 时该参数无效 | 可选 | |
FillColor | CT_Color | 填充颜色,用以填充路径形成的区域以及文字轮廓内的区域,默认值为透明色。 | 可选 | 8.3.2 颜色 |
StrokeColor | CT_Color | 描边颜色,指定路径绘制的颜色以及文字轮廓的颜色,默认值为黑色。 | 可选 | 8.3.2 颜色 |
参考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:DrawParam ID="2" Relative="3">
<ofd:FillColor Value="0 0 0"/>
</ofd:DrawParam>
<ofd:DrawParam ID="3" LineWidth="0.25">
<ofd:StrokeColor Value="156 82 35"/>
</ofd:DrawParam>
<ofd:DrawParam ID="4" Relative="3">
<ofd:FillColor Value="156 82 35"/>
</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>`
属性 | 取值 | 呈现效果 |
---|---|---|
Join | Miter | |
Join | Round | |
Join | Bevel |
Miterlimit属性是为了限制线条相交时产生的结合点长度,如图23所示
图23中,sin =
其中:
W--线宽;
L--结合点长度
举个例子,一个极限为 1.414 斜接,θ 小于 90 度的把斜接会转换成倒角,一个极限为 4.0 的斜接,θ 小于 29 度的斜接会转换成倒角,一个极限为 10.0 的斜接,θ 小于大约 11.5 度的斜接会转换成倒角。
线条的虚线样式通过 DashPattern和DashOffset 两个属性进行控制。组合见表 23。DashPattern指定虚线的线段和间隔长度,有两个或多个值,其中第一个值指定了虚线线段的长度,第二个值指定了线段间隔的长度,以此类推。
DashOffset指定虚线绘制偏移位置,即在当前位置按绘制相反方向偏移DashOffset 值指定的距离后开始绘制虚线。
Dash设置 | 呈现效果 |
---|---|
DashPattern =null | |
DashPattern = "30 30" | |
DashOffset=10 DashPattern ="30 30" | |
DashPattern = "30 15" | |
DashOffset=25 DashPattern ="15 30" | |
DashOffset=30 DashPattern ="30 15" |
线条端点样式属性Cap的取值范围及其呈现效果见表24。
属性 | 取值 | 呈现效果 |
---|---|---|
Cap | Butt | |
Cap | Round | |
Cap | Square |
此处都是 line x1="10" y1="10" x2="190" y2="10" stroke-width="5" 。注意下面2个与第一个的长度是不一样的。
本标准支持GRAY、RGB、CMYK颜色空间。除通过设置各通道值使用颜色空间内的任意颜色之外,还可在颜色空间内定义调色板或指定相应的颜色配置文件,通过设置索引值进行引用。颜色空间结构如图24所示。
颜色空间属性说明见表25。
名称 | 类型 | 说明 | 备注 | 连接 |
---|---|---|---|---|
ID | ST_ID | 声明该颜色空间的标识,不能与已有标识重复 | 必选 | |
Type | string | 颜色空间的类型。可取值如下:Gray、RGB、CMYK | 必选 | |
BitsPerComponent | ST_RefID | 每个颜色通道所使用的位数 有效取值为:1,2,4,8,16 默认值为8 |
可选 | |
Profile | int | 指向包内颜色描述文件 | 可选 | |
Palette | 调色板描述 | 可选 | ||
CV | List | 调色板中预定义颜色。调色板中颜色的编号从 0 开始 | 必选 |
本标准中定义的颜色是一个广义的概念,包括基本颜色、底纹和渐变,颜色结构如图25 所示。
颜色属性说明见表26。
名称 | 类型 | 说明 | 备注 | 连接 |
---|---|---|---|---|
Value | ST_Array | 颜色值,指定了当前颜色空间下各通道的取值。 Value的取值应符合"通道 1 通道 2 通道 3 …"格式。 此属性不出现时,应参考 Index 属性从颜色空间的调色版中取值。 当二者都不出现时,该颜色各通道的值全部为 0 |
可选 | |
Index | int | 调色板中颜色的编号,非负整数,将从当前颜色空间的调色板中取出相应索引的预定义颜色用来绘制。索引从0 开始 | 可选 | |
Color_Space | ST_RefID | 引用资源文件中颜色空间的标识默认值为文档设定的颜色空间 | 可选 | |
Alpha | int | 颜色透明度,在 0~255 之间取值。 默认为 255,示完全不透明 |
可选 | |
Pattern | CT_Pattern | 底纹填充,复杂颜色的一种 | 可选 | 8.3.3 底纹 |
AxialShd | CT_AxialShd | 轴向渐变,复杂颜色的一种。 | 必选 | 8.3.4渐变 |
RadialShd | CT_RadialShd | 径向渐变,复杂颜色的一种 | 必选 | 8.3.4渐变 |
GouraudShd | CT_GouraudShd | 高洛德渐变,复杂颜色的一种。 | 必选 | 8.3.4渐变 |
LaGouraudShd | CT_LaGouraudShd | 格构高洛德渐变,复杂颜色的一种 | 必选 | 8.3.4渐变 |
基本颜色支持两种指定方式:一种是通过设定颜色各通道值指定颜色空间中的某个颜色,另一种是通过索引值取得颜色空间中的一个预定义颜色。
由于不同颜色空间下,颜色通道的含义、数目各不相同,因此对颜色空间的类型、颜色值的描述格式等做出了详细的说明,见表27。BitsPerComponent(简称BPC)有效时,颜色通道值的取值下限是0,上限由 BitsPerComponent决定,即取区间[0,2BPC-1]内的整数,采用10进制或16 进制的形式表示,采用16进制表示时,应以“#”加以标识。当颜色通道的取值超出了相应的区间,则按照默认颜色来处理。
TYPE | BPC | 说明 |
---|---|---|
Gray | 有效 | 只包含一个通道来表明灰度值 例如:"#FF"、"255" |
RGB | 有效 | 包含三个通道,依次是红、绿、蓝 例如:"#11#22#33" "17 34 51" |
CMYK | 有效 | 包含四个通道,依次是青、黄、品红、黑 例如:"#11 #22 #33 #44"、"17 34 51 68 |
裁剪区由一组路径或文字构成,用以指定页面上的一个有效绘制区域,落在裁剪区以外的部分不受绘制指令的影响。
一个裁剪区可由多个分路径(Area)组成,最终的裁剪范围是各个分路径的并集。裁剪区中的数据均相对于所修饰图元对象的外接矩形。裁剪区结构如图44所示。
名称 | 类型 | 说明 | 备注 | 连接 |
---|---|---|---|---|
Area | 裁剪区域,用一个图形对象或文字对象来描述裁剪区的一个组成部分,最终裁剪区是这些区域的并集 | 必选 | ||
DrawParam | ST_RefID | 引用资源文件中的绘制参数的标识,线宽、结合点和端点样式等绘制特性对裁剪效果会产生影响,有关绘制参数的描述见8.2 | 可选 | 8.2绘制参数 |
CTM | ST_Array | 针对对象坐标系,对Area下包含的Path和Text进行进一步的变换 | 可选 | 8.1.5 变换矩阵 |
Path | CT_Path | 用于裁剪的图形,见9.1图形对象 | 必须 | 9 图形 |
Text | CT_Text | 用于裁剪的文本,见11.2文字对象 | 必选 | 11 文字 |
图元对象是版式文档中页面上呈现内容的最基本单元,所有页面显示内容,包括文字、图形、图像等,都属于图元对象,或是图元对象的组合。
图元对象结构如图45所示
名称 | 类型 | 说明 | 备注 | 连接 |
---|---|---|---|---|
Boundary | ST_Box | 外接矩形,采用当前空间坐标系(页面坐标或其他容器坐标),当像素绘制超出此矩形区域时进行裁剪 | 必选 | |
Name | string | 图元对象的名字。默认值为空 | 可选 | |
Visible | boolean | 像素是否可见,默认值为 true | 可选 | |
CTM | ST_Array | 对象空间内的像素变换矩阵 | 可选 | 8.1.5 变换矩阵 |
DrawParam | ST_RefID | 引用资源文件中的绘制参数标识 | 可选 | 8.2绘制参数 |
LineWidth | double | 绘制路径时使用的线宽。 如果有 DrawParam,将覆盖DrawParam中的值 |
可选 | 8.2绘制参数 |
Cap | string | 如果图元对象有DrawParam,则用此值覆盖DrawParam 中的值 |
可选 | 8.2绘制参数 |
Join | string | 如果图元对象有DrawParam,则用此值覆盖DrawParam 中的值 |
可选 | 8.2绘制参数 |
MiterLimit | double | 如果图元对象有DrawParam,则用此值覆盖DrawParam 中的值 |
可选 | 8.2绘制参数 |
DashOffset | double | 如果有 DrawParam,将覆盖DrawParam 中的值 |
8.2绘制参数 | |
DashPattern | double | 如果图元对象有DrawParam,则用此值覆盖DrawParam 中的值 |
可选 | 8.2绘制参数 |
Alpha | double | 图元对象的透明度,取值区间为[0,255] 0表示全透明,255 表示完全不透明 默认0 |
可选 | |
Actions | List | 图元动作 图元动作事件类型应为CLICK |
可选 | 14 动作 |
Clips | List | 被引用图元对象的裁剪区域,采用对象空间坐标系,当存在多个 Clip 对象时,最终裁剪区为所有 Clip 区域的并集 | 可选 | 8.4 裁剪区 |
参考XML如下:
<?xml version="1.0" encoding="utf-8"?>