2010-07-27 4 views
12

Ich verwende den folgenden Code. es kommt immer in die Zielzeichenfolge. es geht nicht um die Seitenzahlschleife zu bekommen. Wenn das PDF-Dokument die Zielzeichenfolge gefunden hat, wird es nicht in den anderen Teil verschoben. Wie kann ich die Seitennummer aus der Zielzeichenfolge abrufen? Sie können ein Beispiel für den folgenden Code sehen. Danke im Voraus.So erhalten Sie die Seitenzahl aus der Zielzeichenfolge beim Analysieren von PDF in iPhone

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

Antwort

1

Wenn Sie zuerst die PDF öffnen und die Seiten erhalten Sie alle Seitenverweise in einem Array speichern kann. Später, wenn Sie eine Dest-Referenz erhalten, vergleichen Sie sie einfach mit den Elementen im Array und Sie werden die Seitennummer kennen.

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))]]; 
} 

Wenn Sie dies einmal tun, und halten Sie die docRef, die Seite Wörterbuch Referenzen werden die gleichen sein wie die Dest verweist, wenn Sie die „Annots“ Array lesen. Der Index des Objekts in Ihrem pagePointers-Array ist die Seitennummer (beginnend mit 0, also fügen Sie natürlich 1 hinzu).

Verwandte Themen