计算pdf中(Td,TD,Tm,cm,T *)内容流的确切位置?

Sup*_*ova 4 pdf tagging accessibility pdf-manipulation pdfbox

获取或计算pdf中(Td,TD,Tm,cm,T *)内容流的确切位置?

作为人类,我能够通过比较来计算(无论是替换最后一个 Td 还是添加到最后一个 Td 或乘以 fontsize)标签在 pdf 内容流中的位置,其中字形位于 pdf 和内容流位置值中。但我无法以编程方式计算字形的完美位置。请看短屏。

在上图中,左侧框是 pdf ui 字形,右侧框包含相关内容流。在内容流中,我突出显示了两个 Td 位置。

在第一圈

3.321 -6.475999832 Td

Td 位置应添加到最后的 Td 位置。假设 x1,y1。

Current_x_pos = x1+3.321

当前_y_pos = y1-6.475999832

然后我们可以得到字形“t”的确切位置。

在第二个突出显示的圆圈中,新的 Td 位置 (231.544 366.377990 Td) 被完全替换,如

Current_x_pos = 231.544

当前_y_pos = 366.377990

除此之外,有时父标签是 Tm 在这种情况下,公式可能是这样的

Current_x_pos = x1+(tdx1*font_size)

当前_y_pos = y1+(tdy1*font_size)

当我们需要像上面那样乘法时,有时需要加法。以编程方式我怎么知道这一点。解析确切的位置?(为乘法添加了新的屏幕短片)

有什么帮助吗?谢谢。 在此处输入图片说明 在此处输入图片说明

mkl*_*mkl 5

当我们需要像上面一样乘法时,有时需要加法。以编程方式我怎么知道这一点。解析确切的位置?

这很简单,对于您总是乘以的Td操作,请参阅规范 ISO 32000-1(类似于 ISO 32000-2):

摘自 ISO 32000-1

对于新鲜初始化(即,同一性)文本行矩阵T流明这个矩阵乘法的模样代替其底部行Xÿ 1

对于文本行矩阵 T lm仅在底行中与身份发生变化,此矩阵乘法看起来像是底行加法,例如xy 1变为x+t x y+t y 1

对于第二个示例中的文本行矩阵 T lm

a 0 0
0 a 0
x y 1
Run Code Online (Sandbox Code Playgroud)

这个矩阵乘法看起来像一个具有乘法一个接着加入到最底行,即XY 1变为X + A·T X Y + A·吨ÿ 1。如果前面的Tf操作的字体大小参数是1,那么a将有效地是产生的字体大小,从而使您假设字体大小是公式的一部分。

一般来说,对于任意的、非退化的文本行矩阵 T lm

a b 0
c d 0
x y 1
Run Code Online (Sandbox Code Playgroud)

这个矩阵乘法看起来更复杂xy 1变成x+a·t x +c·t y y+b·t x +d·t y 1

因此,关于你的问题

以编程方式我怎么知道这一点。解析确切的位置?

您的程序应该始终使用矩阵乘法并忽略它在单独坐标级别上的外观。


使第二个带圆圈的指令看起来只是替换的原因是,先前的文本行矩阵是单位矩阵。不过,这不是由于 François 假设的恢复状态操作,而更简单地是由于文本对象操作BT的开始:

摘自 ISO 32000-1

由于文本矩阵和文本行矩阵在文本对象开始时被重置,并且无法在文本对象中保存或恢复图形状态,因此在这种情况下不应该责怪保存和恢复图形状态操作。

(屏幕截图来自 Adob​​e 共享的 ISO 32000-1 副本。)