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. Удачи!