PDF 字形间距和 TJ 运算符
PDF glyph spacing and TJ operator
我是 PDF 新手,我想操作文件中字符之间的 space。
我已阅读 PDFReference 并了解其中的一些内容。
现在,我遇到的问题是如何计算文本渲染的 spaces。
我有例如:
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
添加 space 然后能够操纵它们。但是我想知道如何用这些附加值计算 ctm 和线矩阵。
我知道我们将 cm 与前一个连接起来。
cm2 x cm1
Tms 未串联 Tm2 替换 Tm1。
我坚持使用 td 运算符和我添加的新 spaces。有什么线索吗?
如果您正在处理水平文本并且只想使用 TJ
运算符控制字形之间的间距,则无需担心将这些值添加到当前变换矩阵或行矩阵.
- CTM(电流变换矩阵)是一个主矩阵,将用户space坐标映射到输出设备坐标;对于每个字形,它与其他参数连接以创建一个临时文本渲染矩阵来定位字形,但 CTM 不会在字形定位时累积变化(请参阅 PDF 32000 参考中的 9.4.4 'Text Space Details')
- 行矩阵捕获文本行开头的初始文本矩阵的值;它实际上只用于匹配文本行的垂直位置,不受字形间距的影响(参见 9.4.2 'Text Positioning Operators')
如评论中所述,OP 不要求 TJ 数字对 当前变换矩阵 或 文本行矩阵而是在文本矩阵Tm.
这在规范 ISO 32000-1(和 ISO 32000-2 中的等价物)第 9.4.4 节文本 Space 详细信息 中进行了解释:字形(可能后跟 TJ 指令数组参数中的数字),文本矩阵应更新如下:
水平模式下tx为位移,ty 为零,在垂直模式下 tx 为零且 ty是位移。适用值计算为
即如果您在处理 TJ 指令时执行此计算,并且当前绘制字形的字符代码后面有一个数字,则该数字在此处被视为参数Tj.
因此,如果您想单独确定由 TJ 数组参数的数字元素引起的位移——例如如果 TJ 数组参数中的 first 元素是一个数字,或者 TJ[= 中有多个连续的数字元素46=] 数组参数,你想知道每个参数的效果——上面减少到
tx = (−Tj / 1000) × Tfs × Th
ty = (−Tj / 1000) × Tfs
我是 PDF 新手,我想操作文件中字符之间的 space。 我已阅读 PDFReference 并了解其中的一些内容。 现在,我遇到的问题是如何计算文本渲染的 spaces。
我有例如:
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
添加 space 然后能够操纵它们。但是我想知道如何用这些附加值计算 ctm 和线矩阵。
我知道我们将 cm 与前一个连接起来。
cm2 x cm1
Tms 未串联 Tm2 替换 Tm1。
我坚持使用 td 运算符和我添加的新 spaces。有什么线索吗?
如果您正在处理水平文本并且只想使用 TJ
运算符控制字形之间的间距,则无需担心将这些值添加到当前变换矩阵或行矩阵.
- CTM(电流变换矩阵)是一个主矩阵,将用户space坐标映射到输出设备坐标;对于每个字形,它与其他参数连接以创建一个临时文本渲染矩阵来定位字形,但 CTM 不会在字形定位时累积变化(请参阅 PDF 32000 参考中的 9.4.4 'Text Space Details')
- 行矩阵捕获文本行开头的初始文本矩阵的值;它实际上只用于匹配文本行的垂直位置,不受字形间距的影响(参见 9.4.2 'Text Positioning Operators')
如评论中所述,OP 不要求 TJ 数字对 当前变换矩阵 或 文本行矩阵而是在文本矩阵Tm.
这在规范 ISO 32000-1(和 ISO 32000-2 中的等价物)第 9.4.4 节文本 Space 详细信息 中进行了解释:字形(可能后跟 TJ 指令数组参数中的数字),文本矩阵应更新如下:
水平模式下tx为位移,ty 为零,在垂直模式下 tx 为零且 ty是位移。适用值计算为
即如果您在处理 TJ 指令时执行此计算,并且当前绘制字形的字符代码后面有一个数字,则该数字在此处被视为参数Tj.
因此,如果您想单独确定由 TJ 数组参数的数字元素引起的位移——例如如果 TJ 数组参数中的 first 元素是一个数字,或者 TJ[= 中有多个连续的数字元素46=] 数组参数,你想知道每个参数的效果——上面减少到
tx = (−Tj / 1000) × Tfs × Th
ty = (−Tj / 1000) × Tfs