2010-07-15 5 views
23

J'essaye d'écrire une visionneuse PDF simple en utilisant CGPDFDocument, basé sur QuartzDemo.
Il est rendu commun: (. Ex en cas de contact)iPhone, CGPDFDocument - liens PDF

-(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); 
} 

Si je comprends bien, le seul dessin, de sorte que toute navigation de structure ou de liens sortants doit être manipulé manuellement. Il existe des fonctions which will set URL ou create element with URL.

La question est: comment obtenir l'URL de lien sortant de certain bloc de pdf?

Merci beaucoup!

des questions similaires:
PDF hyperlinks on iPhone/iPad
How to access hyperlinks in PDF documents (iPhone)?

même sur
iPhone SDK Dev GGroup
macRumors Forum
iPhone Dev SDK Forum
Dev Shed Forum
iphonedevbook.com

+2

+1 pour une question sans réponse nulle part. * frotte la tête et continue de creuser * – Kalle

+3

+1, prime de 50 points - J'aimerais connaître la réponse aussi nous cherchons depuis quelques semaines maintenant et peu importe ce que nous avons essayé aucun résultat –

+2

+100 points pour l'échantillon de travail! –

Répondre

17

Ceci est une question non triviale, c'est pourquoi vous n'avez pas trouvé de réponse facile. La solution est la suivante: vous devez analyser le document PDF. Les bonnes nouvelles sont, il y a des fonctions fournies par Apple pour vous permettre de faire cela. Les mauvaises nouvelles sont, ils sont procéduraux, et l'homme, est-ce un gâchis compliqué.

Dans le code pseudo très rude:

  • utilisation CGPDFDocumentGetCatalog pour obtenir le catalogue pour le look PDF
  • dans l'élément « pages » du catalogue de la page que vous cherchez (oui, il est un dictionnaire, pas un tableau, et un imbriqué, donc cette opération simple n'est pas si simple).
  • maintenant utiliser CGPDFDictionaryGetArray pour obtenir l'objet "Annots"
  • Ensuite, vous devez parcourir les annotations et rechercher les objets "Lier".

Adobe a publié un document qui décrit la spécification PDF. Bonne chance!

+0

Merci, je réalise que ce n'est pas une question triviale, d'où la prime, mais il est très important et la documentation Apple est très pauvre concernant Quartz PDF sur l'iPhone, et il n'y a pas d'autres blogs ou tutoriels couvrant –