Pdf TJ和Td偏移差

Pdf TJ和Td偏移差,pdf,Pdf,我有一些文本需要编辑(对正文本,非常烦人),所以我想知道: 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.42800

我有一些文本需要编辑(对正文本,非常烦人),所以我想知道:

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
...

假设水平文本,我们在我的回答中确定,与Tj数组中的数字Tj对应的水平位移tx可以计算为

tx=(−Tj/1000)×Tfs×Th

其中,Tfs是当前字体大小,Th是当前水平比例因子

因此,如果您有一个水平位移tx,并且想要为Tj阵列计算相应的数字Tj,您只需将上面的方程解析为:

Tj=-1000×tx/(Tfs×Th)

但是在您的案例中,情况并非如此,因为Td并不是简单地按参数移动文本矩阵,而是按参数移动文本行矩阵,并将文本矩阵设置为新的文本行矩阵值:

tx ty Td 移动到下一行的起点,与当前行的起点偏移(tx,ty)。tx和ty应表示以无标度文本空间单位表示的数字。更准确地说,该操作员应执行以下任务:

(ISO 32000-1,表108–文本定位运算符)

因此,Td的tx参数不是要放入上述等式中的tx,而是必须减去自上次设置文本行矩阵以来绘制的文本宽度

所以要改变你的例子

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-宽度(“部分”)/(Tfs×Th)

NUM2=-1000×(38.4280014-宽度(“文本”)/(Tfs×Th)

NUM3=-1000×(33.42799759-宽度(“填充物”)/(Tfs×Th)

在计算这些字符串的宽度时,请记住将字体大小、字符间距和水平缩放比例考虑在内


即使如此,这两种形式也不相同,因为末尾的文本行矩阵不同。

TJ数组参数可能包含字符串和数字,但不包含类似
-36.77199936*1000的表达式。是的,我只是指转换,因为TJ数字是以文本空间的千分之一单位表示的,而Td不是。谢谢!这是非常有益的!现在要获得字符串宽度,我必须获得字形的宽度,是否可以使用FontBBox[x1 y1 x2 y2]和do x2-x1?@maybefreedom“我必须获得字形的宽度,是否可以使用FontBBox[x1 y1 x2 y2]和do x2-x1?”-字体边界框只能在字体的所有字符具有相同宽度时使用。否则,您需要每个字符代码的单独宽度。好的。谢谢你的帮助!