【问题标题】:PDF glyph spacing and TJ operatorPDF 字形间距和 TJ 运算符
【发布时间】:2018-08-29 13:18:08
【问题描述】:

我是 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

Tm 未连接 Tm2 替换 Tm1。

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

【问题讨论】:

  • 可能是旁白——您的 TJ 指令参数必须收集在数组 [...] 中。
  • 好的,谢谢!我改正了
  • 关于您的实际问题“但是我想知道如何使用这些附加值计算 ctm 和线矩阵。[...] 有什么线索吗?” - Rob 的答案解释说,当前的转换矩阵和文本行矩阵都不受这些新间隙的影响。如果这对您没有帮助,请更详细地说明您在寻找什么。
  • 感谢您的耐心等待,哈哈。我想我应该像你说的那样问一个更具体的问题。我基本上需要有关字形坐标的信息。而且由于它们是相对的而不是绝对的,我正在努力计算它们。

标签: pdf pdfrw


【解决方案1】:

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

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

【讨论】:

  • 谢谢!所以基本上我所做的不会影响 Tm 和 CTM。然而,文本渲染矩阵会改变吗?因为它是在绘制每个字形时计算的。
  • “所以基本上我所做的不会影响 Tm 和 CTM。” - 有一刻,在你的问题中,你提到了 text line 矩阵,而不是文本矩阵。文本矩阵是受您的数字影响的 矩阵! TJ 数组自变量元素的规范: 如果是数字,操作员应调整文本位置该数量;也就是说,它应该翻译文本矩阵,Tm。
  • 哦,我以为它们是一样的。所以 Tlm 保持不变,但 Tm 被调整。我们基本上做 10*[1 0 0, -1 0 0, 0 9.38000011 1]?
【解决方案2】:

正如 cmets 中所阐明的,OP 并未要求 TJ 数字对 当前变换矩阵文本行矩阵 的影响,而是而是在 文本矩阵 Tm.

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

水平模式下tx是位移,ty为零,垂直模式下tx 为零,ty 是位移。适用值计算为

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

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

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

ty = (−Tj / 1000) × Tfs

【讨论】:

  • 谢谢。 tx = (−Tj / 1000) × Tfs × Th ,这里 Tfs = 11.04 和 Th = 1?
  • 是的,Tfs 是 11.04。除非有一个 Tz 指令,其参数不是 100 在您显示的内容行之前,否则 Th 是 1
猜你喜欢
  • 2013-09-19
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 2017-04-23
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多