Objective c 从PDF流上的TJ回调生成的CGPDFArray中复制CGPDFString

Objective c 从PDF流上的TJ回调生成的CGPDFArray中复制CGPDFString,objective-c,c,pdf-generation,cgpdfdocument,cgpdf,Objective C,C,Pdf Generation,Cgpdfdocument,Cgpdf,好的,我在分析PDF内容流,发现TJ回调产生一个字符串数组,所以我抓取它并开始遍历它以获得字符串值,如下所示: static void Op_TJ(CGPDFScannerRef s, void *info) { CGPDFArrayRef array; bool success = CGPDFScannerPopArray(s, &array); if(success) { NSMutableString *actualString = [[NS

好的,我在分析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);
    }
}
如果
I
等于一个可被2整除的数字,我会退出for循环,但这是非常草率的,而且似乎效率低下,所以我想知道是否有人有解决方案或知道问题可能是什么。。。我尝试了多个PDF文件,结果相同

我的简单快速修复方法是从以下内容更改for循环:

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

for(int i = 0; i < CGPDFArrayGetCount(array); i+=2)
for(int i=0;i
CGPDFArrayGetString定义为如果指定索引处有PDF字符串,则返回为true的布尔值,否则返回为false

您没有检查返回值

我的猜测是,在没有PDF字符串的情况下,每两次就有一次以上(并且函数返回false)

在这些情况下,函数不会覆盖与上一周期相同的字符串


只是一个猜测。

我的快速修复方法是改变for循环:TJ运算符的参数是字符串或数字的数组,例如“[(a)120(W)120(a)95(Y)]TJ”。这些数字用于字形定位。-因此,这似乎是正确的答案(如果您将“PDF流”替换为“PDF字符串”)。在苹果的文档中,他们谈到了“PDF流”。请参见函数CGPDFArrayGetString返回对PDF字符串的引用。完美!解决了这个问题!谢谢。:)
for(int i = 0; i < CGPDFArrayGetCount(array); i+=2)