0

我是 PDF 新手,我想操纵文件中字符之间的空间。我已经阅读了 PDFReference 并理解了其中的一些内容。现在,我遇到的问题是如何计算文本渲染的空间。

我有例如:

1 0 0 1 0 188.28799438 cm
BT 
/F2 11.04 Tf
1 0 0 -1 0 9.38000011 Tm 
(Some)Tj ( )Tj 
21.24200058 0 Td 
(text)Tj ( )Tj 

我想变成这样:

1 0 0 1 0 188.28799438 cm
BT 
/F2 11.04 Tf
1 0 0 -1 0 9.38000011 Tm 
[(S)10(o)10(m)10(e)( )]TJ 
21.24200058 0 Td 
[(t)10(e)10(x)10(t)( )]TJ 

添加空格,然后能够操作它们。但是我想知道如何使用这些附加值计算 ctm 和线矩阵。

我知道我们将 cm 与前一个连接起来。

厘米2 x 厘米1

Tms 未连接 Tm2 替换 Tm1。

我坚持使用 td 运算符和我添加的新空格。有什么线索吗?

4

2 回答 2

2

如果您正在使用水平文本并且只想使用TJ运算符控制字形之间的间距,则无需担心将这些值添加到当前的转换矩阵或线矩阵。

  • CTM(当前变换矩阵)是将用户空间坐标映射到输出设备坐标的主矩阵;对于每个字形,它与其他参数连接以制作一个临时文本渲染矩阵来定位字形,但 CTM 不会在定位字形时累积更改(请参阅 PDF 32000 参考中的 9.4.4 '文本空间详细信息')
  • 行矩阵捕获文本行开头的初始文本矩阵的值;它实际上只用于匹配文本行的垂直位置,不受字形间距的影响(参见 9.4.2 '文本定位运算符')
于 2018-08-29T19:56:07.470 回答
1

正如评论中所阐明的,OP 不是要求TJ数字对当前转换矩阵文本行矩阵的影响,而是对文本矩阵 T m的影响。

这在 ISO 32000-1 规范(以及等效于 ISO 32000-2)中的第 9.4.4 节文本空间详细信息中进行了解释:绘制字形后(可能后跟TJ指令数组参数中的数字),文本矩阵应更新如下:

分配新 Tm

在水平模式下, t x是位移,t y为零,在垂直模式下,t x为零,t y是位移。适用值计算为

确定 tx 和 ty

即,如果您在处理TJ指令时进行此计算,并且当前绘制的字形的字符代码后面有一个数字,则该数字在此处被视为参数T j

因此,如果您想单独确定由TJ数组参数的数字元素引起的位移- 例如,如果TJ数组参数中的第一个元素是数字,或者如果TJ数组参数中有多个连续的数字元素并且您想要要知道每个人的效果-以上简化为

t x = (-T j / 1000) × T fs × T h

t y = (-T j / 1000) × T fs

于 2018-08-30T10:50:22.010 回答