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)
当我们需要像上面那样乘法时,有时需要加法。以编程方式我怎么知道这一点。解析确切的位置?(为乘法添加了新的屏幕短片)
当我们需要像上面一样乘法时,有时需要加法。以编程方式我怎么知道这一点。解析确切的位置?
这很简单,对于您总是乘以的Td操作,请参阅规范 ISO 32000-1(类似于 ISO 32000-2):
对于新鲜初始化(即,同一性)文本行矩阵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的开始:
由于文本矩阵和文本行矩阵在文本对象开始时被重置,并且无法在文本对象中保存或恢复图形状态,因此在这种情况下不应该责怪保存和恢复图形状态操作。
(屏幕截图来自 Adobe 共享的 ISO 32000-1 副本。)
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |