所以我有这种情况:
使用pdftoxml.exe
sourceforge.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 re
中re
的矩形)。此处相关的是由于浮点问题而未四舍五入或更改的计算。这是行 x 的确切值,不幸的是,它大于硬编码的 'sx,即:27.891 + 0.48 = 28.371
B
28.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。
编辑我实际上发现了一些关于查找字形边界框的有趣信息,但我还无法将这些部分放在一起。