我有一些要编辑的文本(合理的文本,很烦人),所以我想知道是否:
BT /FAAABA 10 Tf
1 0 0 -1 0 9.38000011 Tm
(Some) Tj
36.77199936 0 Td
(text) Tj
38.4280014 0 Td
(stuff) Tj
33.42799759 0 Td
...
等效于此:
BT
/FAAABA 10 Tf
1 0 0 -1 0 9.38000011 Tm
[(Some)-36.77199936*1000(text)-38.4280014*1000(stuff)-33.42799759*1000] TJ
...
答案 0 :(得分:0)
假设我们在对your previous question的回答中确定水平文本,则水平位移 t x 对应于数字 T j < TJ 数组中的/ sub> 可以计算为
t x =(-T j / 1000)×T fs ×T h
其中 T fs 是当前字体大小, T h 是当前水平缩放比例。 / p>
因此,如果您有水平位移 t x 并想要计算相应的数字 T j 对于 TJ 数组,您只需将上面的方程式解析为:
T j = -1000×t x /(T fs ×T h )
但情况并非如此,因为 Td 不会 只是简单地移动文本矩阵按其参数,而是将其移动文本行矩阵并将文本矩阵设置为新的文本行矩阵值:
t x t y Td 移至下一行的开头,与当前行的开头偏移( t x ,t y )。 t x 和 t y 应该表示以无标度的文本空间单位表示的数字。更准确地说,该操作员应执行以下分配:
(ISO 32000-1,表108 –文本定位运算符)
因此, Td 的 t x 参数不是 t x 放在上面的公式中,但是您必须减去自上次设置文本行矩阵以来绘制的文本的宽度。
所以要改变你的例子
BT /FAAABA 10 Tf
1 0 0 -1 0 9.38000011 Tm
(Some) Tj
36.77199936 0 Td
(text) Tj
38.4280014 0 Td
(stuff) Tj
33.42799759 0 Td
变成
BT
/FAAABA 10 Tf
1 0 0 -1 0 9.38000011 Tm
[(Some) NUM1 (text) NUM2 (stuff) NUM3] TJ
窗体,您可以像这样计算数值NUM1
,NUM2
和NUM3
:
NUM1 = -1000×(36.77199936-width(“ Some”))/(T fs ×T h )
NUM2 = -1000×(38.4280014-width(“ text”))/(T fs ×T h )
NUM3 = -1000×(33.42799759-width(“ stuff”))/(T fs ×T h )
计算这些字符串的宽度时,请记住要考虑字体大小,字符间距和水平缩放!
即使那样,两种形式也不相同,因为末尾的文本行矩阵不同。