代码之家  ›  专栏  ›  技术社区  ›  juFo

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

pdf
  •  0
  • juFo  · 技术社区  · 5 年前

    我试图找出如何在PDF文件中使用TJ运算符数组中的数字。

    我用的例子是:

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

    这些数字应该如何使用?

    1. 是否应该单独处理?
    2. 该数字是否应与后面的字符串一起用于计算后面字符串的第一个字符?e、 g:120+(W)
    3. 其他选择?

    到目前为止,我一直试图单独处理,但没有取得好的效果。

    期待阅读您的答案/评论,以帮助更好地理解它。

    另一个示例阵列:

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

    更新:

    示例文件I测试: 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参数添加glyph width 100而不是0时,结果是ok。。。但是我不能将这个w0(100)值保留在数字中,因为98%的其他pdf文件都不符合这个值。。

    1 回复  |  直到 5 年前
        1
  •  3
  •   Community Egal    4 年前

    方程式

    看起来你试图解释这个等式

    tx = ((w0 - Tj/1000) * Tfs + Tc + Tw) * Th
    

    在glyph空间(而不是文本空间)中,至少插入的值显示为指示。相反,在文本空间中以字体类型不可知的方式解释它。

    特别地:

    • w0 -使用PDF字体字典中宽度数组中相应字符的宽度,并将其除以1000;我预计首府a的价值约为.667。
    • Tj -使用来自 TJ 操作数组参数,例如120。
    • Tfs 操作,例如10。
    • Tc -使用图形状态中的值,该值是相关 Tc " 活动
    • Tw -使用0或(对于单字节字符代码32)图形状态的值,该值是相关 "
    • Th 运算除以100。

    您的示例文件

    x 坐标您的代码计算的字形的起源,所以我无法判断您的计算是错误的还是代码中的其他内容是错误的。

    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
    

    根据你的图像,你的坐标已经非常错误了。

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

    因此,请与代码计算的坐标进行比较。如果您的不同,特别是如果它们的差异越来越大,您仍然没有按照上面解释的方式进行计算,至少不准确(可能您使用的数值类型在这些计算中太有损?)。如果你的没有不同,那么你的问题不在于坐标的计算,而在于坐标的使用;特别是,在文本和矢量图形指令中使用它们的方式不同。