tags:

views:

150

answers:

0

I am using a following code. it always go to destination string if. it does not go to to get page number loop. if pdf found destination sring then it will not go to else part. so how can i get the page number from destination string. I am giving a code as given below.Thanx in advanced.

- (OutlineItem*)recursiveUpdateOutlines: (CGPDFDictionaryRef) outlineDic parent:(OutlineItem*) parentItem level:(NSUInteger) level;
{
    // update outline count
    outlineCount++;
    OutlineItem* item = [[OutlineItem alloc] init];
    // Level
    item.level = level;
    // Title
    CGPDFStringRef title;
    if(CGPDFDictionaryGetString(outlineDic, "Title", &title)) {
        const char* pchTitle = CGPDFStringGetBytePtr(title);
        item.title = [NSString stringWithUTF8String:pchTitle];
        // DEBUG
        //NSLog(item.title);
    }
    if (parentItem != nil) {
        // Add to parent
        [parentItem.children addObject:item];
        // Next
        CGPDFDictionaryRef nextDic;
        if (CGPDFDictionaryGetDictionary(outlineDic, "Next", &nextDic)) {
            [self recursiveUpdateOutlines:nextDic parent:parentItem level: level];
        }
    }
    // First child
    CGPDFDictionaryRef firstDic;
    if (CGPDFDictionaryGetDictionary(outlineDic, "First", &firstDic)) {
        [self recursiveUpdateOutlines:firstDic parent:item level: level + 1];
    }
    // Dest
    CGPDFStringRef destString;
    if(CGPDFDictionaryGetString(outlineDic, "Dest", &destString)) {
        const char* pchDest = CGPDFStringGetBytePtr(destString);
        CGPDFDictionaryRef destDic;
        if(CGPDFDictionaryGetDictionary(dests, pchDest, &destDic)) {
            NSLog(@"");
        }
        else {

            item.destString = [NSString stringWithUTF8String:pchDest];
        }


    } else {
        CGPDFDictionaryRef ADic;
        if (CGPDFDictionaryGetDictionary(outlineDic, "A", &ADic)) {
            const char* pchS;
            if (CGPDFDictionaryGetName(ADic, "S", &pchS)) {
                CGPDFArrayRef destArray;
                if (CGPDFDictionaryGetArray(ADic, "D", &destArray)) {
                    int count = CGPDFArrayGetCount(destArray);
                    switch (count) {
                        case 5:
                        {
                            // dest page
                            CGPDFDictionaryRef destPageDic;
                            if (CGPDFArrayGetDictionary(destArray, 0, &destPageDic)) {
                                int pageNumber = [self.pages indexOfObjectIdenticalTo:destPageDic];
                                item.page = pageNumber;
                            }
                            // x
                            CGPDFInteger x;
                            if (CGPDFArrayGetInteger(destArray, 2, &x)) {
                                item.x = x;
                            }
                            // y
                            CGPDFInteger y;
                            if (CGPDFArrayGetInteger(destArray, 3, &y)) {
                                item.y = y;
                            }
                            // z
                        }
                            break;
                        default:
                            NSLog(@"");
                            break;
                    }
                }
            }
        }
    }


    return item;
}