【问题标题】:How does the Tm operator pass the data in a PDF document using CGPDF?Tm算子如何使用CGPDF传递PDF文档中的数据?
【发布时间】:2013-08-06 22:31:33
【问题描述】:

根据“Pdf Reference Version 1.7”,文本定位运算符“Tm”描述如下:

...虽然操作数指定了一个矩阵,但它们作为六个单独的数字而不是数组传递给 Tm。

我不明白我应该如何检索不是数组、字符串或任何类似内容的一系列数字。当我实现这段代码时,我发现对象类型是真实的,当我尝试获取它的值时,我最终得到的只是数组的最后一个数字。

CGPDFOperatorTableSetCallback(table, "Tm", positioningOperator);

...

void positioningOperator(CGPDFScannerRef scanner, void *info)
{
    [(__bridge CTPDFParser *)info operatorPositionScanned:scanner];
}

...

- (void)operatorPositionScanned:(CGPDFScannerRef)scanner
{
    CGPDFContentStreamRef streamRef = CGPDFScannerGetContentStream(scanner);

    CGPDFObjectRef object;
    CGPDFScannerPopObject(scanner, &object);

    CGPDFObjectType type = CGPDFObjectGetType(object);

    if( type == kCGPDFObjectTypeReal)
    {
        CGPDFReal real;
        if( CGPDFObjectGetValue(object, type, &real) )
        {
            // 1 0 0 1 256.3246 669.3472 Tm
            NSLog(@"%f", real); // Prints only 669.347168
        }
    }
}

我检查了传递的值是否属于任何其他类型,但它只是真实的,所以我真的不知道如何检索其他数字。

任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试过从扫描仪中弹出多个对象?应该有六个数字要弹出。
  • 谢谢!这就是我一直在寻找的

标签: objective-c pdf cgpdf


【解决方案1】:

每个 PDF 运算符在堆栈中都有其操作数。对于您处理的每个运算符,您必须从堆栈中弹出所需数量的操作数,如 PDF 规范所述。

对于 Tm 运算符,您必须从堆栈中弹出 6 个操作数。

【讨论】:

  • 谢谢!我完全忘记了弹出功能。现在一切正常
猜你喜欢
  • 2011-06-24
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
相关资源
最近更新 更多