Это просто синтаксический анализ CGPDFDictionary под названием «Outline» в CGPDFPage.
// get outline & loop through dictionary...
CGPDFDictionaryRef outlineRef;
if(CGPDFDictionaryGetDictionary(pdfDocDictionary, "Outlines", &outlineRef)) {
}
, затем вы начинаете с элемента First и анализируете свой путь.
CGPDFDictionaryGetDictionary(outlineRef, "First", &firstEntry)
Вы хотитечтобы получить Название и Место назначения.
NSString *outlineTitle = PSPDFStringFromPDFDict(outlineElementRef, @"Title");
CGPDFDictionaryGetObject(outlineElementRef, "Dest", &destinationRef)
Сложная вещь начинается с получения правильного места назначения, потому что есть (ужас, PDF!) несколько способов сохранить его, плюс несколько способов, которые не определены вСсылка PDF, но все еще в дикой природе.Плюс несколько вариантов, которые просто сломаны, и вам придется иметь с ними дело.
Например, вы могли бы получить количество словаря набросков, используя
CGPDFInteger elements;
if(CGPDFDictionaryGetInteger(outlineRef, "Count", &elements)) {
PSPDFLog(@"parsing outline: %ld elements. (Count will be ignored anyway)", (long int)elements);
}else {
PSPDFLogError(@"Error while parsing outline. No outlineRef?");
}
Нообратите внимание, что иногда счетчик недействителен из-за неработающих инструментов создания PDF.Смотрите PDF как HTML.Даже если он не работает, парсеры приложат все усилия, чтобы отобразить как можно больше данных.Так что мой совет - игнорировать графа и разбирать словарь в любом случае.(Несколько недель назад я столкнулся с документом, в котором было Count = -10. Иди с цифрой)
Я не могу опубликовать полный код, так как он из моей коммерческой библиотеки PDF PSPDFKit, и мне нужно зарабатывать на жизньиз этого;) Но это должно начать вас.