PDF字体对象的/Widths数组是否为冗余信息?

PDF字体对象的/Widths数组是否为冗余信息?,pdf,fonts,Pdf,Fonts,对pdf的引用表明,定义字体资源的pdf字典需要包含一个属性/Widhts,提供以下信息: (标准14字体除外;间接参考) 首选)一个(LastChar)数组− FirstChar+1)宽度,每个 元素是等于的字符代码的图示符宽度 FirstChar加上数组索引。对于超出范围的字符代码 FirstChar到LastChar,从 使用此字体的FontDescriptor条目。图示符宽度为 以单位计量,其中1000个单位对应于文本中的1个单位 空间这些宽度必须与中给出的实际宽度一致 字体程序。(见附

对pdf的引用表明,定义字体资源的pdf字典需要包含一个属性
/Widhts
,提供以下信息:

(标准14字体除外;间接参考) 首选)一个(LastChar)数组− FirstChar+1)宽度,每个 元素是等于的字符代码的图示符宽度 FirstChar加上数组索引。对于超出范围的字符代码 FirstChar到LastChar,从 使用此字体的FontDescriptor条目。图示符宽度为 以单位计量,其中1000个单位对应于文本中的1个单位 空间这些宽度必须与中给出的实际宽度一致 字体程序。(见附录H中的实施说明61)

重点补充

再次提供宽度有什么好处字体程序中是否包含宽度

很明显:考虑到字体程序中甚至提到要包含字形宽度,是否有人可以确认或拒绝此处应该提供的信息,字形宽度是温和的冗余信息

或者一些字体程序在不指定字形宽度的情况下包含字形? 是因为有些字体程序不包括宽度,还是这只是一个耐心的执行者,缩进使PDF文件的生成复杂化,希望人们继续使用Adobe软件


测试引用字体(未嵌入)是否“正确”所需的
/Widths
条目(即pdf查看器应检查pdf想要的字体程序是否可能是平台上找到的字体程序,比较
/Widths
)?

宽度数组被记录为存在,以便应用程序可以确定字形的度量,而无需解码字体。例如,在文本周围绘制选择框或以某种方式高亮显示文本时,这可能会有用

参见PDF 1.7规范第393和394页:

每个字形的宽度信息都存储在字体中 字典和字体程序本身。(两组宽度 必须相同;将此信息存储在字体字典中, 尽管是冗余的,但使用户应用程序可以确定标志符号的位置,而无需查看内部 字体程序。)

我还应该提到,有很多PDF制作人认为滥用宽度数组是改变字体间距的一种方便方法。如果字体数组的宽度与字体程序中字形的度量不匹配,Acrobat将使用宽度数组值(这是您引用的文本引用的附录H中的实施说明)。我似乎还记得,最新版本的规范取消了基本14种字体的例外,所有字体现在都应该有一个/Widths数组。 我们有许多PDF文件示例,其中度量数组与字体程序中的宽度不匹配

请注意,Acrobat Pro中的飞行前检查程序在检查PDF/A兼容性时,如果宽度和度量值不同,将抛出错误


因此,虽然/Widths数组在技术上是冗余的,因为可以从字体中检索相同的信息,但对于某些应用程序来说,以更易于访问的形式获取信息是很方便的,如果(作为PDF使用者)希望匹配Acrobat的渲染,您需要使用它。

感谢您在本答案中说明背景。也许我现在觉得自己不那么被愚弄了,不得不提供这些看似多余的数据,因为我很享受向pdf用户提供某些东西的感觉,甚至更容易获得;)同样令人鼓舞的是,在这些情况下,我需要准确度,但不愿意做明智的事情,并包括字体程序,这件事将对我有利。Adobe一定读过关于如何保持简单的书。是的,这也是一个很好的观点,我忘了提到;当字体未嵌入且使用者选择子项时,使用/Widths数组可确保在预期位置绘制图示符,即使子项字体的度量不同。