PDF字形间距和TJ运算符

时间:2018-08-29 13:18:09

标签: pdf pdfrw

我是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与上一个连接起来。

  

cm2 x cm1

未串联的Tms Tm2代替Tm1。

我被td运算符和我添加的新空格所困扰。有任何线索吗?

2 个答案:

答案 0 :(得分:1)

如果您正在处理水平文本,并且只想使用TJ运算符控制字形之间的间距,则不必担心将这些值添加到当前的转换矩阵或行矩阵中。 / p>

  • CTM是将用户空间坐标映射到输出设备坐标的主矩阵;对于每个字形,它与其他参数连接在一起以创建一个临时文本呈现矩阵来放置该字形,但是CTM不会随着字形的定位而累积更改(请参见PDF 32000参考中的9.4.4“文本空间详细信息”)< / li>
  • 行矩阵在文本行的开头捕获初始文本矩阵的值;它实际上仅用于匹配文本行的垂直位置,而不受字形之间的间距影响(请参见9.4.2“文本定位运算符”)

答案 1 :(得分:0)

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

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

  

assignment new Tm

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

  

determination tx and ty

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

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

  

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

     

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