我正在从PDF文档中提取链接和它们的位置。
每个链接都有一个边界矩形。
<</A 169 0 R/BS<</S/S/Type/Border/W 0>>/Border[0 0 0]/H/N/Rect[97.0153 116.556 185.543 21.5209]/Subtype/Link/Type/Annot>>
让我们看看Rect[97.0153 116.556 185.543 21.5209]
(我从我的文件中复制了它)。
Rectangle是一个包含四个数字的数组,在默认的用户空间单位中给出左、下、右、上边缘的坐标。
我们有left = 97.0153
,bottom = 116.556
,right = 185.543
,top = 21.5209
据我所知,PDF的用户空间是一个规则的笛卡尔坐标系。因此,我希望矩形的上边缘大于下边缘,所以当我想计算矩形的高度时,我使用公式height = top - bottom
。对于特定的PDF文档height = 21.5209 - 116.556 = -95.036
,即高度是负的,我做错了什么。
我一定是错过了什么,做了错误的假设。有人能给点建议吗?
关于你的性格
Rectangle是一个数组,包含四个默认用户空间单位的数字,分别表示左、下、右、上边缘的坐标。
你在评论中说
我从BBox还有条目描述。BBox被声明为具有类型rectangle,并提供了ifrectangle的描述。PDF参考资料,第三版,p. 616.
但是BBox条目描述不是定义矩形类型。定义在第101页:
因此,您为BBox找到的特性条目使成为BBox所需的典型格式条目。然而,其他矩形可能仍然使用非典型形式。因此,您需要规范化数组(或者在您的情况下,将该差值的绝对值作为高度)。 作为题外话,我不会指望BBox条目也必须总是以典型的形式出现。始终准备好规范化矩形数组。3.8.3矩形
矩形用于描述页面上的位置和各种对象(如字体)的边界框。矩形被写成由四个数字组成的数组,这些数字表示一对对角线相对的角的坐标。通常,数组的形式为(ll子>
将<子>子>你<子>x子>你的<子>子>] 指定矩形的左下x、左下y、右上x和右上y坐标,按此顺序。
注意:虽然矩形通常由其左下角和右上角指定,但也可以指定任意两个对角线相对的角。处理PDF的应用程序应该准备好在需要特定角的情况下规范化这些矩形。
这就是说,你应该帮自己一个忙,不要再使用2001年的旧PDF参考,而是使用指定PDF的ISO规范,即ISO 32000-1或ISO 32000-2。ISO 32000-1已于2008年发布。ISO 32000-2已于2017年发布,并于2020年更新。
如果你不想在规范上花钱,Adobe已经在他们的网站上分享了ISO 32000-1的副本,其中删除了ISO页面标题。要找到它,只需搜索"pdf32000";目前在https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf
PDF 1.4参考文献仍应使用的唯一情况是在基于该参考文献的规范上下文中,例如PDF/A-1。否则PDF参考文献是过时的,并且在Adobe PDF架构师Leonard Rosenthol之前已经被称为,本质上是不规范的。