考虑以下操作员序列:
q 0.12 0 0 0.12 0 0 cm 1 g 472 471.922 4014 6073 re f 0 G 0 g q 8.33333 0 0 8.33333 0 0 cm BT /R7 12 Tf 0 1.00055 -1 0 71.52 336.711 Tm [text 1] TJ /R8 9.96 Tf 0 1.00057 -1 0 105.12 60.3506 Tm [text 2] TJ ET Q 885 502.922 6 297 re f q 8.33333 0 0 8.33333 0 0 cm BT /R8 9.96 Tf 0 1.00057 -1 0 105.12 95.9906 Tm [text 3] TJ 0 1.00057 -1 0 116.16 60.3505 Tm [text 4] TJ ET Q 977 502.922 6 535 re f q 8.33333 0 0 8.33333 0 0 cm BT /R8 9.96 Tf 0 1.00057 -1 0 116.16 124.551 Tm [text 5] TJ 0 1.00057 -1 0 127.2 60.3507 Tm [text 6] TJ ET Q 1069 502.922 6 386 re f q 8.33333 0 0 8.33333 0 0 cm BT /R8 9.96 Tf 0 1.00057 -1 0 127.2 106.671 Tm [text 7] TJ 0 1.00057 -1 0 138.24 60.3508 Tm [text 8] TJ ET Q 1161 502.922 6 437 re f q 8.33333 0 0 8.33333 0 0 cm ----------------------------------------------------------------------------- BT /R8 9.96 Tf 0 1.00057 -1 0 138.24 112.791 Tm [line 1] TJ ET Q q 1268 2621.92 m 1268 2675.92 l 1380 2675.92 l 1380 2621.92 l h W n q 8.33333 0 0 8.33333 0 0 cm BT /R9 11.04 Tf 0 0.999402 -1 0 162.6 314.631 Tm Tj ET Q Q q 1268 2621.92 m 1268 4396.92 l 2049 4396.92 l 2049 2621.92 l h W n 1 g 1267 2620.92 780 1775 re f* Q q 8.33333 0 0 8.33333 0 0 cm BT /R9 11.04 Tf 0 0.999402 -1 0 204.6 515.751 Tm Tj ET Q 0 0 1 RG 0 0 1 rg q 8.33333 0 0 8.33333 0 0 cm BT /R9 11.04 Tf 0 0.999402 -1 0 227.16 355.071 Tm [line 2] TJ ET Q 1903 2958.92 6 1101 re f 0 G 0 g q 8.33333 0 0 8.33333 0 0 cm BT /R9 11.04 Tf 0 0.999402 -1 0 227.16 487.191 Tm Tj ET Q q 0 1565 -408 0 1705 2732.92 cm /X0 Do Q q 0 1738 -506 0 2659 2639.92 cm /X1 Do Q q 8.33333 0 0 8.33333 0 0 cm BT /R7 12 Tf 0 1.00055 -1 0 342 398.991 Tm [line 3] TJ ET
我简化了TJ命令以仅声明文本。请注意Tj
被错误地显示为<01> Tj
,当您尝试编辑问题时,您可以在源代码中看到它。
页面顺时针旋转90°。页面属性:
[Type] => Page [MediaBox] => Array ( [0] => 0 [1] => 0 [2] => 595 [3] => 842 ) [Rotate] => 90 [Resources] => Array ( [Font] => Array ( [R7] => Array ( [Name] => Helvetica-Bold [Type] => Type1 [BaseFont] => Helvetica-Bold [Subtype] => Type1 ) [R8] => Array ( [Name] => Helvetica [Type] => Type1 [BaseFont] => Helvetica [Subtype] => Type1 ) [R9] => Array ( [Name] => DUCRGK+Calibri [Type] => TrueType [BaseFont] => DUCRGK+Calibri [FirstChar] => 1 [LastChar] => 18 [Subtype] => TrueType ) ) [XObject] => Array ( [X0] => Array ( [Subtype] => Image [ColorSpace] => DeviceRGB [Width] => 250 [Height] => 65 [BitsPerComponent] => 8 [Filter] => DCTDecode [Length] => 3927 ) [X1] => Array ( [Subtype] => Image [ColorSpace] => DeviceRGB [Width] => 278 [Height] => 81 [BitsPerComponent] => 8 [Filter] => FlateDecode [Length] => 2617 ) ) ) [Contents] => Array ( [Filter] => FlateDecode [Length] => 2525 ) [Parent] => Array ( [Type] => Pages [Count] => 20 )
在PDF查看器中,它看起来像:
line 1 image 1 line 2 image 2 line 3
由于页面轮换e Tx
和f Ty
已切换。例如,在0 1.00057 -1 0 138.24 112.791 Tm
中,138.24表示垂直移位,112.791表示水平移位。
为方便起见,我还在这里添加矩阵表示:
[a b 0] [c d 0] [e f 1] or [a b c d e f]
似乎是因为cm
运算符表示缩放图像Tx和Ty是如此之大。考虑到这一点,我们将得到以下结果:
Ty Content Calculation 138.24 line 1 204,6 image 1 1705/8.33333 227.16 line 2 319,08 image 1 2659/8.33333 342 line 3
这似乎是正确的。
根据PDF参考v1.7(页205)进行的转换:
•翻译指定为[1 0 0 1 tx ty],其中tx和ty为 转换坐标系原点的距离 水平和垂直尺寸。
•通过[sx 0 0 sy 0 0]获得缩放。这会缩放坐标 使1个单位在新的水平和垂直方向 坐标系分别与sx和sy单位的大小相同, 在之前的坐标系中。
•旋转由[cosθsinθ-sinθcosθ00]产生,具有 将坐标系轴旋转角度θ的效果 逆时针方向。
•偏斜由[1tanαtanβ10 0]指定,使x轴倾斜 角度α和y轴角度β。
问题:
cm/Tm
运算符更改的矩阵是否是相同的矩阵?这意味着,在图像处理之后,然后使用像Td/TD
这样的运算符修改文本矩阵应该在cm
状态之后修改矩阵吗?sx
和sy
,并且所有其他值都与示例0类似,它标识它是缩放但是0值不应该应用于实际矩阵?很明显,Skew + Rotation不能在1个命令中应用,因为两个用途b
c
。同时翻译和旋转一起使用,如上例所示。Tm
替换当前矩阵(页426)和cm
连接(页219)。考虑到这一点,我的结果与1705/8.33333
一样不正确,我们还应该添加前一个Ty位置,即138.24,结果我们将得到342,84并且它给出了错误的Ty位置。这有什么问题?1705/8.33333
来识别图像位置吗?