好的,我正在分析PDF内容流,发现TJ回调产生了一个字符串数组,所以我获取它并开始遍历它以获得字符串值,如下所示:

static void Op_TJ(CGPDFScannerRef s, void *info)
{
    CGPDFArrayRef array;
    bool success = CGPDFScannerPopArray(s, &array);
    if(success) {
        NSMutableString *actualString = [[NSMutableString alloc] init];
        NSLog(@"array count:%zu",CGPDFArrayGetCount(array));
        for(size_t i = 0; i < CGPDFArrayGetCount(array); i++) {
            CGPDFStringRef string;
            CGPDFArrayGetString(array, i, &string);
            NSString *stringData = (NSString *)CGPDFStringCopyTextString(string);
            [actualString appendString:stringData];
            NSLog(@"string Data:%@",stringData);
        }
        NSLog(@"actual string:%@",actualString);
    }
}

唯一的问题是,这是我的输出:
2013-01-11 12:39:49.895 WinPCS Mobile[1617:c07] began text object
2013-01-11 12:39:49.895 WinPCS Mobile[1617:c07] array count:7
2013-01-11 12:39:49.896 WinPCS Mobile[1617:c07] string Data:In
2013-01-11 12:39:49.896 WinPCS Mobile[1617:c07] string Data:In
2013-01-11 12:39:49.896 WinPCS Mobile[1617:c07] string Data:it
2013-01-11 12:39:49.896 WinPCS Mobile[1617:c07] string Data:it
2013-01-11 12:39:49.897 WinPCS Mobile[1617:c07] string Data:ia
2013-01-11 12:39:49.897 WinPCS Mobile[1617:c07] string Data:ia
2013-01-11 12:39:49.897 WinPCS Mobile[1617:c07] string Data:ls
2013-01-11 12:39:49.898 WinPCS Mobile[1617:c07] actual string:InInititiaials
2013-01-11 12:39:49.898 WinPCS Mobile[1617:c07] ended text object

我已经退出了for循环,如果i等于一个可被2整除的数字,但是这是非常草率的,似乎效率低,所以我想知道是否有人有解决方案或者知道问题是什么。我试过多个PDF文件,结果都一样。
我的简单快速解决方案是将for循环从以下内容更改为:
for(int i = 0; i < CGPDFArrayGetCount(array); i++)

对此:
for(int i = 0; i < CGPDFArrayGetCount(array); i+=2)

最佳答案

CGPDFArrayGetString被定义为返回BOOL,如果在指定索引处有PDF字符串,则返回BOOL,否则返回false。
你没有检查返回值!
我的猜测是,每两个没有PDF字符串的人都有不止一次(函数返回false)。
在这些情况下,函数不会覆盖与前一个循环保持相同的字符串变量。
只是一个猜测。。

10-06 00:54