1

OK、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

2で割り切れる数に等しい場合は、forループを終了することにしましたiが、これは非常にずさんで非効率的であるように思われるので、誰かが解決策を持っているか、問題が何であるかについて何か考えがあるかどうか疑問に思っています...私は同じ結果で複数のPDFファイルを試しました。

私の簡単な簡単な修正は、これからforループを変更することでした:

for(int i = 0; i < CGPDFArrayGetCount(array); i++)

これに:

for(int i = 0; i < CGPDFArrayGetCount(array); i+=2)
4

1 に答える 1

2

CGPDFArrayGetStringは、指定されたインデックスにPDF文字列がある場合はtrue、それ以外の場合はfalseのBOOLを返すように定義されています。

戻り値をチェックしていません!

私の推測では、PDF文字列がない場合は2回に1回です(関数はfalseを返します)。

そのような場合、関数は前のサイクルと同じままの文字列変数を上書きしません。

ただの推測..

于 2013-01-11T19:14:13.037 に答える