Создание оглавления из файла pdf
Я использую кварц для отображения pdf-содержимого, и мне нужно создать оглавление для навигации по PDF файлу. От чтения документации Apple я думаю, что я должен использовать CGPDFDocumentGetCatalog, но я не могу найти примеров того, как использовать это в любом месте. Любые идеи?
Обновление: Все еще не найдено решение для этого. Я устал от Alex ', но результат, который я получаю, выглядит так:
2011-07-27 09:16:19.359 LDS Scriptures App-iPad[624:707] key: Pages
2011-07-27 09:16:19.361 LDS Scriptures App-iPad[624:707] key: Count
2011-07-27 09:16:19.362 LDS Scriptures App-iPad[624:707] pdf integer value: 238
2011-07-27 09:16:19.363 LDS Scriptures App-iPad[624:707] key: Kids
2011-07-27 09:16:19.366 LDS Scriptures App-iPad[624:707] key: Type
2011-07-27 09:16:19.368 LDS Scriptures App-iPad[624:707] key: Outlines
2011-07-27 09:16:19.370 LDS Scriptures App-iPad[624:707] key: Count
2011-07-27 09:16:19.371 LDS Scriptures App-iPad[624:707] pdf integer value: 7
2011-07-27 09:16:19.372 LDS Scriptures App-iPad[624:707] key: First
2011-07-27 09:16:19.374 LDS Scriptures App-iPad[624:707] key: Parent
2011-07-27 09:16:19.375 LDS Scriptures App-iPad[624:707] key: Count
2011-07-27 09:16:19.376 LDS Scriptures App-iPad[624:707] pdf integer value: 7
Пока не знаю, как превратить это в полезное оглавление. В идеале я хотел бы получить массив объектов NSDictionary
с заголовком и соответствующим номером страницы.
Ответы
Ответ 1
Что-то вроде этого может помочь вам приступить к работе:
NSURL *documentURL = ...; // URL to file or http resource etc.
CGPDFDocumentRef pdfDocument = CGPDFDocumentCreateWithURL((CFURLRef)documentURL);
CGPDFDictionaryRef pdfDocDictionary = CGPDFDocumentGetCatalog(pdfDocument);
// loop through dictionary...
CGPDFDictionaryApplyFunction(pdfDocDictionary, ListDictionaryObjects, NULL);
CGPDFDocumentRelease(pdfDocument);
...
void ListDictionaryObjects (const char *key, CGPDFObjectRef object, void *info) {
NSLog("key: %s", key);
CGPDFObjectType type = CGPDFObjectGetType(object);
switch (type) {
case kCGPDFObjectTypeDictionary: {
CGPDFDictionaryRef objectDictionary;
if (CGPDFObjectGetValue(object, kCGPDFObjectTypeDictionary, &objectDictionary)) {
CGPDFDictionaryApplyFunction(objectDictionary, ListDictionaryObjects, NULL);
}
}
case kCGPDFObjectTypeInteger: {
CGPDFInteger objectInteger;
if (CGPDFObjectGetValue(object, kCGPDFObjectTypeInteger, &objectInteger)) {
NSLog("pdf integer value: %ld", (long int)objectInteger);
}
}
// test other object type cases here
// cf. http://developer.apple.com/mac/library/documentation/GraphicsImaging/Reference/CGPDFObject/Reference/reference.html#//apple_ref/doc/uid/TP30001117-CH3g-SW1
}
}
Ответ 2
Вот мой подход.
1. Загрузите этот фреймворк vfr reader
2. Используйте эти строки кода, чтобы получить все главы PDF
NSString *path = [[NSBundle mainBundle] pathForResource:@"Reader" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSArray *arr = [ReaderDocumentOutline outlineFromFileURL:targetURL password:@""];
Надеюсь, это поможет вам.
Ответ 3
Я сделал это с бесплатной библиотекой для iOS FastPdfKit