IPhone, CGPDFDocument - ссылки в формате PDF

Я пытаюсь написать простой просмотрщик PDF, используя CGPDFDocument на основе QuartzDemo.
Существует общий рендеринг:

-(void)drawInContext:(CGContextRef)context
{
    // PDF page drawing expects a Lower-Left coordinate system, 
    // so we flip the coordinate system before we start drawing.
    CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);

    // Grab the first PDF page
    CGPDFPageRef page = CGPDFDocumentGetPage(pdf, pageNumber);
    // We're about to modify the context CTM to draw the PDF page
    //  where we want it, so save the graphics state 
    // in case we want to do more drawing
    CGContextSaveGState(context);
    // CGPDFPageGetDrawingTransform provides an easy way 
    // to get the transform for a PDF page. It will scale down to fit, 
    // including any base rotations necessary to display the PDF page correctly. 
    CGAffineTransform pdfTransform = 
            CGPDFPageGetDrawingTransform(page, 
                    kCGPDFCropBox, self.bounds, 0, true);
    // And apply the transform.
    CGContextConcatCTM(context, pdfTransform);
    // Finally, we draw the page 
    // and restore the graphics state for further manipulations!
    CGContextDrawPDFPage(context, page);
    CGContextRestoreGState(context);
}

Как я понимаю, его единственный чертеж, поэтому вся структура навигации или исходящие ссылки должны обрабатываться вручную (например, в событии касания).

Существуют функции которые будут устанавливать URL или создать элемент с URL.

Вопрос: как получить URL исходящей ссылки из определенного блока PDF?

Спасибо!

Похожие вопросы:
PDF-гиперссылки на iPhone/iPad
Как получить доступ к гиперссылкам в PDF-документах (iPhone)?

То же самое на
iPhone SDK Dev GGroup
macRumors Forum
iPhone Dev SDK Forum
Форум Dev Shed
iphonedevbook.com

Ответ 1

Это нетривиальный вопрос, поэтому вы не нашли легкого ответа. Решение: вам нужно проанализировать документ PDF. Хорошей новостью является то, что Apple предоставляет функции, позволяющие вам это делать. Плохая новость заключается в том, что они процедурные, и человек, это запутанный беспорядок.

В очень грубом псевдокоде:

  • используйте CGPDFDocumentGetCatalog, чтобы получить каталог для PDF
  • посмотрите в элементе "страницы" каталога для страницы, которую вы ищете (да, это словарь, а не массив и вложенный, поэтому эта простая операция не так проста).
  • теперь используйте CGPDFDictionaryGetArray, чтобы получить объект "Annots"
  • Далее вам нужно выполнить итерацию аннотаций и искать объекты "Ссылка".

Adobe опубликовала документ, в котором изложена спецификация PDF. Удачи!