Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iphone中pdf解析时如何从目标字符串中获取页码_Iphone - Fatal编程技术网

iphone中pdf解析时如何从目标字符串中获取页码

iphone中pdf解析时如何从目标字符串中获取页码,iphone,Iphone,我正在使用以下代码。它总是进入目标字符串,如果。它不去获取页码循环。如果pdf找到目标字符串,则不会转到其他部分。那么如何从目标字符串中获取页码呢。您可以看到下面的代码示例。提前谢谢 - (OutlineItem*)recursiveUpdateOutlines: (CGPDFDictionaryRef) outlineDic parent:(OutlineItem*) parentItem level:(NSUInteger) level; { // update outline co

我正在使用以下代码。它总是进入目标字符串,如果。它不去获取页码循环。如果pdf找到目标字符串,则不会转到其他部分。那么如何从目标字符串中获取页码呢。您可以看到下面的代码示例。提前谢谢

- (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;
}

当您第一次打开PDF并获取页面时,可以将所有页面引用存储在一个数组中。稍后,当您获得Dest引用时,只需将其与数组中的项目进行匹配,就可以知道页码

CGPDFDocumentRef docRef = CGPDFDocumentCreateWithURL(fileURL);
int numberOfPages = CGPDFDocumentGetNumberOfPages(docRef);
pagePointers = [[NSMutableArray alloc] initWithCapacity:numberOfPages];
if (0<numberOfPages) for (int i=1; i<numberOfPages; i++) {
   [pagePointers addObject:[NSValue valueWithPointer:CGPDFPageGetDictionary(CGPDFDocumentGetPage(docRef, i))]];
}
CGPDFDocumentRef docRef=CGPDFDocumentCreateWithURL(fileURL);
int numberOfPages=CGPDFDocumentGetNumberOfPages(docRef);
pagePointers=[[NSMutableArray alloc]initWithCapacity:numberOfPages];
如果(0