PDF TJ运算符

时间:2019-03-13 17:31:30

标签: pdf

是否可以确定TJ运算符中的数字是否表示单词之间的空格?

例如:[(Sta)28(ry)-333(Plzenec,)] TJ

数字28不足以容纳空格,否则333应根据实际字体大小将其保留为空格。字体大小为9.96

1 个答案:

答案 0 :(得分:1)

首先请注意,对于字距之间的空格与紧缩空格之间没有分隔数字的绝对限制数。您所能做的就是开发启发式方法,对于某些文档(通常是设置严密的文档),它们将失败。

现在,请记住在计算文本替换 t x t y 时如何应用这些数字。数字前的最后一个字符的原点到其后的第一个字符的原点:

screen shot from ISO 32000-1, 9.4.4 Text Space Details

(ISO 32000-1,第9.4.4节“文本空间详细信息”,也已讨论here

因此,首先,这样一个数字如果为负,则仅加宽与下一个字符的距离。

此外,在字体大小乘以之前应用数字。因此,正如我在对该问题的评论中错误主张的那样,不必必须考虑字体大小。

直接从字形位移中减去数字(按 1 / 1000 标定)。因此,可以将其与相关字体的字形位移进行比较,以了解数字的含义。

字形位移本质上是相应字体的 Widths W 数组中的数字(默认为 MissingWidth / DW < / strong>值)按 1 / 1000 进行缩放。由于 TJ 数字和宽度均按 1 / 1000 缩放,因此您可以直接进行比较。 / p>

因此,一个明显的选择是将负 TJ 数的绝对值与所涉及字体中 space 字形的宽度进行比较。这因字体而异,例如对于Courier是600,对于Helvetica是278,对于Times-Roman是250。

TJ 数字创建的单词之间的空格不必一定要与字体的全空格字形一样宽,而是一定比例的字体,例如值(YMMV)的一半可以用作将 TJ 数字解释为单词之间的空格的最低要求。

但是,不幸的是,如果PDF生成器通过 TJ 数字在单词之间创建所有空格,而没有通过空格字形创建所有空格,并且如果字体仅作为子集嵌入,则无需嵌入完全是空格字形。在这种情况下,您可能需要使用其他字形进行比较;通常,将大写字母“ M”的长度用作字体宽度的量度,您可能希望使用其相关分数,例如五分之一(再次是YMMV)。


您可以改善启发式

  • 还要考虑字符间距值 T c :如果 T c < / em> / T fs 为负,且具有相关的绝对值,文本设置紧密。在这种情况下,您可能希望减少上述确定的限制数。或者
  • 通过分析您的文字或周围文字中的所有 TJ 数字来
  • 。不过,我只能在这里猜测什么是可以接受的启发式方法...