Как оператор Tm передает данные в документе PDF с помощью CGPDF?

Согласно «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
        }
    }
}

Я проверил, было ли переданное значение какого-либо другого типа, но оно было просто реальным, поэтому я действительно не знаю, как получить другие числа.

Любая помощь будет оценена по достоинству.


person Diego A. Rincon    schedule 06.08.2013    source источник
comment
Вы пытались извлечь из сканера более одного объекта? Должно получиться шесть номеров.   -  person mkl    schedule 06.08.2013
comment
Спасибо! Это то, что я искал   -  person Diego A. Rincon    schedule 06.08.2013


Ответы (1)


Каждый оператор PDF имеет свои операнды в стеке. Для каждого оператора, с которым вы работаете, вы должны извлечь из стека необходимое количество операндов, как описано в спецификации PDF.

Для оператора Tm вам нужно извлечь 6 операндов из стека.

person Mihai Iancu    schedule 06.08.2013
comment
Спасибо! Я совсем забыл о всплывающих функциях. Теперь все работает нормально - person Diego A. Rincon; 06.08.2013