获取或计算pdf中(Td,TD,Tm,cm,T *)内容流的确切位置?
作为一个人类,我可以通过比较标志符号在pdf中的位置和内容流的位置值来计算(无论是替换最后的Td还是添加最后的Td或使用fontsize乘以fontsize)标记在pdf内容流中的位置。但是我无法以编程方式计算字形的完美位置。请查看屏幕简短内容。
在上图中,左侧框是pdf ui标志符号,右侧框包含相关的内容流。在内容流中,我突出显示了两个Td位置。
在第一圈
3.321 -6.475999832 Td
Td位置应添加到最后的Td位置。假设x1,y1。
Current_x_pos = x1 + 3.321
Curent_y_pos = y1-6.475999832
那么我们可以获得字形“ t”的确切位置。
在第二个突出显示的圆圈中,新的Td位置(231.544 366.377990 Td)被完全替换为
Current_x_pos = 231.544
Curent_y_pos = 366.377990
有时,父标签为Tm时,公式可能像这样
Current_x_pos = x1 +(tdx1 * font_size)
Curent_y_pos = y1 +(tdy1 * font_size)
当我们需要像上面那样相乘,有时又相加时。以编程方式我怎么知道这一点。要解析确切位置?(新增了用于乘法的新屏幕简称)
有什么帮助吗?
谢谢。
最佳答案
当我们需要像上面那样相乘,有时又相加时。以编程方式我怎么知道这一点。要解析确切位置?
这很简单,对于Td操作,您总是要相乘,请参见规范ISO 32000-1(与ISO 32000-2类似):
对于新初始化的(即身份)文本行矩阵Tlm,此矩阵乘法看起来像用tx ty替换其底行。
对于仅在一行中相对于标识仅改变的文本行矩阵Tlm,该矩阵乘法看起来像是对一行的加法,例如。 x y 1变为x + tx y + ty 1。
对于第二个示例中的文本行矩阵Tlm
a 0 0
0 a 0
x y 1
此矩阵乘法看起来像是一个乘法运算,其后是最底行的加法运算,即xy 1变为x + a·tx y + a·ty1。如果前面的Tf操作的字体大小参数为1,则a有效地是生成的字体大小,从而引起您的假设,即字体大小是公式的一部分。
通常,对于任意,非退化的文本行矩阵Tlm
a b 0
c d 0
x y 1
这个矩阵乘法看起来更加复杂,x y 1变成x + a·tx + c·ty y + b·tx + d·ty 1。
因此,关于您的问题
以编程方式我怎么知道这一点。要解析确切位置?
您的程序应始终仅使用矩阵乘法,而忽略其在单独坐标级别的外观。
使第二个带圆圈的指令看起来像是单纯的替换,是因为先前的文本行矩阵是恒等矩阵。但是,这并不是由于François假定的还原状态操作,而是由于文本对象操作BT的开始:
由于在文本对象的开头重置了文本矩阵和文本行矩阵,并且无法在文本对象中保存或恢复图形状态,因此在这种情况下,不应该负责保存和恢复图形状态操作。
(屏幕截图来自Adobe共享的ISO 32000-1副本。)