文本方向和页面旋转调整坐标有什么区别?

What's the difference between text direction and page rotation adjusted coordinates?

TextPosition class 引用的 "page rotation adjusted coordinates" 和 "text direction adjusted coordinates" 有什么区别?直观的解释可能是最好的。

PDFBox 文本提取允许轻松访问这两个坐标系中文本字形的坐标:

页面旋转调整坐标

每个 PDF 页面可以有一个 旋转 属性,允许的值为 0、90、180 和 270。PDF 查看器通常获取页面内容并显示他们旋转了那个角度。例如。您查看的横向页面可能实际上具有横向格式的页面大小,也可能实际上具有纵向格式的页面大小,并且 Rotate 值为 90 或 270。

页面旋转调整坐标系是考虑页面根据其Rotate值旋转的坐标系,原点为在页面左上角,x坐标向右递增,y坐标向下递增。

文本方向调整坐标

每个文本字形可以任意角度绘制(通过当前变换矩阵和文本矩阵)。

给定文本字形的文本方向调整坐标系是考虑要旋转页面(90°的倍数)的坐标系,因此文本字形是直立绘制或至少(因为字形可以任意角度绘制,而不仅仅是 90° 的倍数)尽可能直立,原点在页面的左上角,x 坐标向右增加,y 坐标增加向下。

比较

通常,文档页面上的文本会被排列成最终(考虑到页面旋转)竖直显示。因此,通常这两个坐标系中每个字形的坐标将重合(或至少接近重合——因为它们的计算方式不同,可能会由于 float 不准确而存在微小差异)。

对于最终不会竖直显示的文本(例如,考虑 headers 窄 table 列以直角绘制的情况),您可能更喜欢一个或另一个系统,具体取决于你想要达到的目标:

  • 如果要比较任意字形之间的相对位置,显然需要一个通用的坐标系,因此不能使用文本方向调整后的坐标;对于这种情况,PDFBox 选择了页面旋转调整坐标系。

  • 如果你想检查两个具有相同文本绘制方向的字形是否彼此相邻,即可能形成一个单词(的一部分),测试它们的文本方向调整坐标可能更可取.

(实际上根据我的经验,这些坐标系都不是文本提取 post 处理所需的坐标系;通常您需要未旋转的默认 PDF 页面用户 space 坐标系中的坐标来例如,用一些标记注释覆盖它们。要获得它们,必须从关联的文本矩阵中获取翻译值,然后 de-normalize 它们...)