PDF Оглавление Разбор с iOS Quartz 2D - PullRequest
0 голосов
/ 21 декабря 2010

Этот вопрос задавался раньше, я знаю. Однако никто не ответил на это хорошо. Мне интересно, как проанализировать «оглавление» PDF на iPhone. Документы говорят мне, чтобы использовать CGPDFDocumentGetCatalog, но не как его использовать. Все они говорят, что он возвращает словарь. Кроме того, я не могу найти пример кода. Есть предложения?

Ответы [ 2 ]

0 голосов
/ 16 июля 2012

Это просто синтаксический анализ 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, и мне нужно зарабатывать на жизньиз этого;) Но это должно начать вас.

0 голосов
/ 09 января 2011

выглядит так, как будто на SO ближе всего выглядит Создание оглавления из pdf-файла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...