是否有可能确定TJ运算符中的数字是否代表单词之间的空格?
实施例:[(Sta)28(ry)-333(Plzenec)] TJ
数字28对于空间是不够的,否则333应该是根据实际字体大小的空间。字体大小是9.96
首先请注意,没有绝对限制数字来区分单词之间的空格以及用于字距调整的空格。您所能做的就是开发启发式算法,这些启发式算法会因某些文档而失败,通常用于非常紧密的文档。
现在记住在计算文本替换tx或ty之前如何应用这些数字,从最后一个字符的原点开始,之后是第一个字符的原点:
(ISO 32000-1,第9.4.4节文本空间详细信息,也讨论了here)
因此,首先,如果它是负数,这样的数字只会扩大与下一个字符的差距。
此外,在字体大小相乘之前应用该数字;因此,我不必考虑字体大小,因为我在对问题的评论中错误地声明了。
数字(按1/1000缩放)直接从字形位移中减去。因此,可以将其与所讨论字体的字形位移进行比较,以获得数字含义的印象。
字形位移基本上是相应字体的Widths或W数组(默认为MissingWidth / DW值)的数字,缩放为1/1000。由于TJ数字和宽度均按1/1000缩放,您可以直接比较它们。
因此,一个明显的选择是将负TJ数的绝对值与所讨论字体中空格字形的宽度进行比较。这与字体不同,例如Courier为600,Helvetica为278,Times-Roman为250。
由TJ数字创建的单词之间的空格不一定必须与字体的完整空格字形一样宽,而是必须与字体的相关部分一样宽,例如,其值的一半(YMMV)可以用作将TJ数字解释为单词之间的空格的最小值。
不幸的是,如果PDF生成器通过TJ数字创建单词之间的所有空格而空格字形没有创建空格,并且如果字体仅作为子集嵌入,则根本不需要嵌入空格标志。在这种情况下,您可能希望使用其他字形进行比较;通常,大写字母'M'的长度用作字体宽度的度量,您可能想要使用其相关部分,例如,五分之一(YMMV再次)。
您可以改善您的启发式方法