是否可以确定TJ运算符中的数字是否表示单词之间的空格?
例如:[(Sta)28(ry)-333(Plzenec,)] TJ
数字28不足以容纳空格,否则333应根据实际字体大小将其保留为空格。字体大小为9.96
答案 0 :(得分:1)
首先请注意,对于字距之间的空格与紧缩空格之间没有分隔数字的绝对限制数。您所能做的就是开发启发式方法,对于某些文档(通常是设置严密的文档),它们将失败。
现在,请记住在计算文本替换 t x 或 t y 时如何应用这些数字。数字前的最后一个字符的原点到其后的第一个字符的原点:
(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)。 您可以改善启发式