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

Gil*_*ili 0 pdfbox

TextPosition 类引用的“页面旋转调整坐标”和“文本方向调整坐标”有什么区别?直观的解释可能是最好的。

mkl*_*mkl 5

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

\n

页面旋转调整坐标

\n

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

\n

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

\n

文本方向调整坐标

\n

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

\n

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

\n

比较

\n

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

\n

对于最终不垂直显示的文本(例如,考虑以直角绘制窄表格列的标题的情况),您可能更喜欢其中一种系统,具体取决于您想要实现的目标:

\n
    \n
  • 如果要比较任意字形相对于彼此的位置,显然需要一个共同的坐标系,因此不能使用文本方向调整坐标;对于本例,PDFBox 选择了页面旋转调整坐标系。

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

    \n
  • \n
\n

(实际上,根据我的经验,这些坐标系都不是文本提取后处理所需的坐标系;通常您需要未旋转的默认 PDF 页面用户空间坐标系中的坐标,例如用一些标记注释覆盖它们。要获得它们,需要有从关联的文本矩阵中获取翻译值,然后对它们进行反规范化...)

\n

  • 您能否在这里进一步解释一下“从关联的文本矩阵中获取翻译值,然后对它们进行反规范化”? (2认同)