根据“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
}
}
}
我检查了传递的值是否属于任何其他类型,但它只是真实的所以我真的不知道如何检索其他数字。
任何帮助都将不胜感激。
答案 0 :(得分:2)
每个PDF运算符在堆栈上都有其操作数。对于您处理的每个操作符,您必须从堆栈中弹出所需数量的操作数,如PDF规范所述。
对于Tm操作符,您必须从堆栈中弹出6个操作数。