Как получить данные оглавления (схемы) PDF в iOS (iPad)?

Я создаю приложение для iPad, которое отображает PDF-файлы, и я хотел бы иметь возможность отображать оглавление и позволять пользователю переходить на соответствующие страницы.

I на данный момент потратил несколько часов на исследования, и, похоже, поскольку PDFKit [не поддерживается в iOS], мой единственный вариант - проанализировать метаданные PDF вручную.

Я рассмотрел несколько решений, но все они умалчивают об одном - как связать страницу в «общих» метаданных с реальным номером страницы элемента.

[Это решение] помогло мне понять, как перемещаться вниз по дереву Outline / A / S / D, чтобы найти объект «Dest», но оно выполняет своего рода сравнение объектов с использованием [self.pages indexOfObjectIdenticalTo: destPageDic], который Я не понимаю.

Я прочитал [официальную спецификацию PDF от Adobe], а в разделе «12.3.2.3 Именованные места назначения» описан способ, которым элемент схемы может указывать на страницу:

Вместо определения непосредственно с явный синтаксис, показанный в таблице 151, пункт назначения может быть указан косвенно через объект имени (PDF 1.1) или байтовая строка (PDF 1.2).

И продолжает эту строку, которая мне совершенно непонятна:

Значение этой записи должно быть словарь, в котором каждый ключ является название пункта назначения и соответствующий value - это либо массив, определяющий назначения, используя синтаксис, показанный в Таблица 151 или словарь с буквой D запись, значением которой является такой массив.

Это относится к странице 366, «12.3.2.2 Явные места назначения», где таблица описывает страницу: «В каждом случае страница является косвенной ссылкой на объект страницы»

Итак является ли результат CGPDFDocumentGetPage или CGPDFPageGetDictionary «косвенной ссылкой на объект страницы»?

Я нашел [ветку на lists.apple.com], в которой обсуждается. [Этот комментарий] подразумевает, что вы можете сравнить адрес (в памяти?) Объекта CGPDFPageGetDictionary для данной страницы и сравнить его со страницами в дереве «Outline» метаданных PDF.

Однако, когда я посмотрю по адресу объектов страницы в дереве структуры и сравните их с адресами, которые никогда не совпадают. Строка, используемая в этом потоке "TTDPRINT (@"% d =>% p ", k + 1, dict);" печатает "дикт" как указатель в памяти ... нет оснований полагать, что возвращенный объект будет таким же, как объект, возвращенный где-то еще ... они будут в разных местах памяти!

Моей последней надеждой было посмотреть на источник код из инструмента "наброски" командной строки Apple [упомянутый в этой книге] (как [предложенный в этой теме]), но я нигде не могу его найти.

Итог - есть ли у кого-нибудь представление о том, как работают контуры PDF, или знает какой-нибудь открытый исходный код (желательно objective-c), который читает контуры PDF?

ARGG: Здесь были размещены всевозможные ссылки, но очевидно, новый пользователь может публиковать только одну ссылку за раз

8
задан Bob 12 December 2010 в 18:31
поделиться