PDF:使用TJ运算符时了解数组中的数字

时间:2019-01-08 08:27:44

标签: pdf

我正在尝试找出您应该如何在PDF文件中使用TJ运算符数组中的数字。

我正在使用示例:

[(A)120(W)120(A)95(Y again)]TJ

应该如何使用数字?

  1. 应该单独处理吗?
  2. 该数字是否应与该字符串一起用于计算该字符串之前的第一个字符?例如:(A)+ 120
  3. 该数字是否应与后面的字符串一起用于计算后面的字符串的第一个字符?例如:120 +(W)
  4. 其他选择?

到目前为止,我一直在尝试单独处理它,但效果不佳。

期待阅读您的答案/评论以帮助更好地理解它。 (希望组合位移的其他计算是正确的。

另一个示例数组:

[(1.1)-1753(A)1(bo)-7(ut This Book)]TJ

更新:

我测试的示例文件:http://www.filedropper.com/9mei2018reduced

“不良”结果:

enter image description here

包含TJ的字符串和数字的数组:

[(1)-100(0)-99( )-101(m)-100(e)-100(i)-99( )-101(1)-100(9)-99(1)-100(8)
-99( )-101(d)-99(e)-100( )-101(r)-99(a)-101(i)-99(d)-100(s)-100( )-101(o)
-100(p)-100( )-100(O)-100(o)-100(s)-100(t)-100(e)-100(n)-100(d)-99(e)]TJ

在计算Tx时,我分别处理字符串和数字。对于数字(-100,-99,-101等)的计算,当我为w0参数添加字形宽度100而不是0时,结果是可以的...但是我不能保持此状态w0(100)值代表数字,因为其他pdf文件的98%都不正确。

1 个答案:

答案 0 :(得分:2)

方程式

您似乎试图解释方程式

tx = ((w0 - Tj/1000) * Tfs + Tc + Tw) * Th
在字形空间而不是文本空间中的

,至少您插入的值似乎表明这一点。而是以不可知的字体类型在文本空间中解释它。

尤其是:

  • w0-使用PDF字体字典中width数组中各个字符的宽度,并将其除以1000;我希望大写A的值约为.667。
  • Tj-使用 TJ 操作数组参数中的值,例如120。
  • Tfs-使用来自图形状态的字体大小,它是来自相关 Tf 操作的字体大小参数,例如10。
  • Tc-使用来自图形状态的值,该值是来自相关 Tc 操作的参数。
  • Tw-使用0或(在单字节字符代码为32的情况下)使用来自图形状态的值,该值是来自相关的 Tw 的参数” 操作。
  • Th-使用来自图形状态的值,该值是相关的 Tz 操作的参数除以100。

您的示例文件

不幸的是,您没有显示 x 坐标,这些坐标是针对字形原点计算的,因此我无法确定您的计算是否错误或代码中是否存在其他错误。

由于这些值大部分都是微不足道的(字体大小1,没有Tc或Tw,Th 1),因此我手动计算了前几个字符的字形起源的 x 坐标:

character   x coordinate
'1'         734.204784
'0'         745.564784
' '         756.908784
'm'         765.452784
'e'         779.468784
'i'         790.012784
' '         796.076784
'1'         804.620784
'9'         815.980784
'1'         827.324784
'8'         838.684784
' '         850.028784
'd'         858.572784

根据您的图片,此处的坐标已经很错误了。

我计算出的坐标似乎是正确的,但是它们特别匹配绘制字形“阴影”的矢量图形指令的坐标。

因此,请与您计算出的代码的坐标进行比较。如果您的计算方法有所不同,尤其是当它们之间的差异越来越大时,您仍然不按照上述说明进行计算,至少不能如此精确地进行计算(可能您使用的数字类型在这些计算中过于易损?)。如果您没有什么不同,那么您的问题不在于坐标的计算,而在于它们的使用。特别是您,然后将它们分别用于文本和矢量图形说明。