1

所以我有这种情况:

使用pdftoxml.exesourceforge.net 我得到了文本标记及其坐标。如果 pdf 文件被旋转(即它/Rotate 90的源代码中有一个),pdftoxml.exe 交换给定页面的高度和宽度以及任何给定对象的 x 和 y 坐标。这就是我的理解。

我对此很满意,直到我遇到一个用来re画粗线的 pdf 文件。也就是说,对于一条粗线,绘制了 4 条细线并填充了空间,如图所示。在左侧,您会看到两条细线(非彩色),它们是较大矩形(高度放大)的一部分。我清空了实际上充满黑色的空间,以查看线条:

在此处输入图像描述

此外,上面的pdf被旋转。因此,为了B最终保持直立,使用了这个文本矩阵:0 1 -1 0 90.72 28.3705 Tm. 细线是这样绘制的83.04 27.891 0.48 0.48 re(坐标在这里可能会有所不同,但它是一些类似的重新操作。操作就像adobe's pdf 1.7 page 133x y width height rere的矩形)。此处相关的是由于浮点问题而未四舍五入或更改的计算。这是行 x 的确切值,不幸的是,它大于硬编码的 'sx,即:27.891 + 0.48 = 28.371B28.3705

83.52 27.891 m 92.39999999999999 27.891 l s

92.39999999999999 27.891 m 92.39999999999999 28.371 l s

92.39999999999999 28.371 m 83.52 28.371 l s

83.52 28.371 m 83.52 27.891 l s

页面的坐标842 x 595,2根据左上角的 PDFXChange 查看器进行。这看起来很自然,因为页面是旋转的。不旋转,它将是左下角,所以应该没问题。


当文本更改1 0 0 1 90.72 28.3705 Tm为原始方向时,可以看到折叠的底线与左侧的线:

在此处输入图像描述

这是我所期望的,因为B'sy 是28.3705并且行的水平位置是28.371(如上面代码行的第二行所示)。所以很可能B的底线超出了28.371但我无法放大。

现在第一张图片中线和线之间的差距B来自哪里?这对我来说很重要,因为我试图找出最靠近左边的线B并且对这两个值感到惊讶,即我从 pdftoxml.exe 获得的文本的 suppsed x 值28.3705和水平线值28.371. 因为我知道这条线实际上远远超出了B不可能正确的左边,至少在“取线的 x 位置,取 B 的 x 位置,比较,如果线的 x 小于B'sx, 线在左边”。

我无法使用 x 值找到正确的行。相反,我得到了最左边的另一行......就像文本落在他们两个之间一样。

这是文字绘制代码:

BT
%0 7.5 -7.5 0 90.72 28.3705 Tm
0 1 -1 0 90.72 28.3705 Tm
%1 0 0 1 90.72 28.3705 Tm
/F1 1 Tf
1 Tr
q
0.01 w
(B) Tj
Q
ET

因此,B 的大小或线条粗细没有什么特别之处。

你能帮我弄清楚吗?


I这是一张更新的图片,在同一页面上绘制了两张,上一张I使用0 1 -1 0 90.72 28.3705 Tm(数学旋转 90 度),下一张使用1 0 0 1 90.72 28.3705 Tm。所以我不明白,下部是如何I旋转+90并最终成为上部的?

这是pdf代码。它相当大,但您应该能够将其复制到您的文件中并将其命名为 sth.pdf。

在此处输入图像描述

PDF 示例(您必须实际放大到真正大的左上角才能看到I

编辑我实际上发现了一些关于查找字形边界框的有趣信息,但我还无法将这些部分放在一起。

4

1 回答 1

2

请看一下

字形指标

字形原点是字形坐标系中的点 (0, 0)。Tj 和其他文本显示操作符应将要绘制的第一个字形的原点定位在文本空间的原点。

(无耻地从ISO 32000-1 第 9.2.4 节的图 39复制)。

如您所见,字形所在的坐标(字形原点)不一定是实际字形边界框开始的位置。这可以解释您的第一张图片中的差距。

因此,当您试图从光学上找出最靠近 B 的左侧线时,仅取线的 x 位置、取 B 的 x 位置、比较,如果该线的 x 小于 B 是不够的x,线在左边,相反,您还必须考虑字体数据本身,并考虑字形原点和由B表示的字形的字形边界框之间的差距。

如需更深入的分析,请提供字体数据。

编辑关于您的双 I 问题...在您上面的评论中,您说您实际上希望在两个 I 字符中看到一个共同点 - 旋转点,因此可以获得左侧边界框侧的可靠水平坐标的一个字符。

双I情况

红线交叉的点不是你的旋转点吗?它应该是两个 Tj 操作的字形起源,而 I 字形也有它们的起源。现在你可以从那里开始测量了。

于 2013-01-30T08:09:16.463 回答