1. Pdf坐标空间
坐标空间决定了各个pdf对象如何显示。对象的位置、大小、转向等信息,这些信息的表示采取的是笛卡尔坐标系,坐标空间由如下三个因素决定:
坐标原点位置
坐标系X轴、y轴的方向
坐标系每个轴的单位长度
每个坐标空间之间的数据映射关系由转换矩阵决定。简单的解释即:y(目标空间)=A(变换矩阵)x(源空间)+b(常向量)
PDF中坐标系统分为设备坐标空间和用户坐标空间。
设备坐标空间(device space)
决定了pdf对象最终的显示效果
用户坐标空间(User space)
由于各设备的坐标空间的不一致,PDF又定义了用户坐标空间,以保证各种对象的相对关系在设备上显示时能够保持一致,从而达到与设备无关的显示效果。
PDF为不同的对象定义了不同的坐标空间,比如文字对应文字坐标空间 【text space】,字形、表单对象、位图、颜色模式等,各个不同的空间之间的关系如下图所示.
具体某个对象的坐标空间定义和对象的常见坐标表示见后续博文。
图片来源于PDF规范。
PDF文件中页面上定义坐标空间由cropbox指定定义,大小默认为72dpi,PS3中定义的默认坐标空间原点为左下角,大小默认为72dpi。
用户空间坐标单位由用户定义,常见的单位有:厘米、英寸等,对于显示和打印来说,设备空间的坐标单位为像素点。
两种不同的单位之间的转换参考:换算关系
2. Pdf坐标变换
坐标转换矩阵定义了各个坐标空间之间的关系。坐标转换主要包含了几何学中的的基础变换关系:平移、缩放、旋转、拉伸等四种变换。
几何变换的解释和说明可以参考百度百科: 仿射变换
PDF系统中变换矩阵采取如下向量表示:
(a b 0)
(c d 0)
(e f 1)
(a b 0)
(x’,y’,1)= (x,y,1)* (c d 0)
(e f 1)
x’ = a * x + c * y + e
y’ = b * x + d * y + f
由于变换矩阵中用于二维坐标系统时,变换矩阵第三列总是0 0 1,因此pdf文件中变换矩阵定义为(a b c d e f)
平移变换(Translate)
矩阵:(1,0,0,1,tx, ty)
即 x’ = x + tx
y’ = y + ty
变换后,坐标原点移位,其余不变。
缩放变换(Rotate)
矩阵: [sx, 0, 0, sy, 0, 0]
即 x’ = sx * x
y' = sy * y
缩放变换后,坐标轴单位变位sx,sy,轴与原点方向不变
旋转变换(Rotate)
矩阵: [cosθ,sinθ,-sinθ,cosθ, 0, 0]
即: x’ = cosθ * x – sinθ * y
y' = sinθ * x + cosθ* y
θ为旋转角度,逆时针旋转时角度为正.
旋转变换后,坐标轴单位、原点不变,轴方向改变角度θ
斜变形变换(skew)
矩阵: [1, tanα, tanβ ,1, 0, 0]
即 x’ = x + tanα * y
y' = tanβ * x + y
斜变形变换后,坐标原点、单位不变,x轴逆转α度,y顺转β度。
各种变换示意如下图所示 :来源于pdf规范文档
注意两点:
坐标转换作用于坐标空间而非对象本身。对象的绘制是在转换空间计算完成之后进行。
由于矩阵计算的不可逆性,坐标转换不能随意交换,交换会导致不同的显示效果。参考示意图如下。一般说来若要正确显示对象,坐标变换顺序应该是:平移、旋转、缩放或斜变形.