好的,我正在分析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)。
在这些情况下,函数不会覆盖与前一个循环保持相同的字符串变量。
只是一个猜测。。