首页 > 解决方案 > 从 PDF 链接的 Rect 计算的负高度

问题描述

我正在从 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](我是通过从我的文件中复制得到的)。

矩形是默认用户空间单位的四个数字的数组,分别给出左、下、右和上边缘的坐标。

所以我们有left = 97.0153, bottom = 116.556, right = 185.543, top = 21.5209.

据我所知,PDF 的用户空间是一个常规的笛卡尔坐标系。因此,我希望矩形的顶部边缘大于底部的边缘,所以当我想计算矩形的高度时,我使用公式height = top - bottom。对于那个特定的 PDF 文档height = 21.5209 - 116.556 = -95.036,即高度是负数,我做错了。

我一定错过了一些东西并做出了错误的假设。有人可以建议吗?

标签: pdf

解决方案


关于你的性格

矩形是默认用户空间单位的四个数字的数组,分别给出左、下、右和上边缘的坐标。

你在评论中说

我也是从BBox条目描述中得到的。BBox被声明为矩形类型,如果为矩形,则提供描述。PDF 参考,第 3 版,p. 616.

但是BBox入口描述不是矩形类型的定义。定义在第101 页:

3.8.3 矩形

矩形用于描述页面上的位置和各种对象(例如字体)的边界框。一个矩形被写成一个由四个数字组成的数组,给出了一对对角对角的坐标。通常,数组采用以下形式

[ll x ll y ur x ur y ]

按顺序指定矩形的左下 x、左下 y、右上 x 和右上 y 坐标。

注意:虽然矩形通常由左下角和右上角指定,但指定任意两个对角相对的角也是可以接受的。处理 PDF 的应用程序应准备好在需要特定角的情况下标准化此类矩形。

因此,您为 BBox 条目找到的特征构成了该BBox条目所需的典型形式。但是,其他矩形可能仍使用非典型形式。因此,您需要对数组进行归一化(或者在您的情况下,将该差的绝对值作为高度)。

顺便说一句,我也不指望BBox条目总是采用那种典型的形式。始终准备好标准化矩形数组。


话虽如此,您应该帮自己一个忙,不再使用 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 参考已经过时,并且之前已经被Adob​​e PDF 架构师 Leonard Rosenthol称为非规范性的。


推荐阅读