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
iPhone Dev SDK Форум
Dev Shed Forum
iphonedevbook.com
1 ответ
Это нетривиальный вопрос, поэтому вы не нашли простого ответа. Решение таково: вам нужно разобрать PDF документ. Хорошей новостью является то, что Apple предоставляет вам функции, позволяющие вам сделать это. Плохая новость в том, что они процедурные, и человек, это запутанный беспорядок.
В очень грубом псевдокоде:
- используйте CGPDFDocumentGetCatalog, чтобы получить каталог для PDF
- посмотрите в элементе "pages" каталога ту страницу, которую вы ищете (да, это словарь, а не массив и вложенный, так что эта простая операция не так проста).
- Теперь используйте CGPDFDictionaryGetArray, чтобы получить объект "Annots"
- Далее вам нужно перебрать аннотации и искать объекты "Ссылка".
Adobe опубликовала документ, в котором изложена спецификация PDF. Удачи!