2010-11-07 6 views
1

La situation: J'ai un document pdf qui inclut des hyperliens. Je voudrais que mon application iPhone affiche ce document pdf et permette de cliquer sur les hyperliens.Comment afficher un document PDF contenant des hyperliens? (sur iOS)

Remarque: Actuellement, j'essaie de le faire avec un UIWebView, qui semble malheureusement incapable de détecter les connexions de liaison. Il existe une famille de classes & appelées CGPDF que j'ai lues dans la documentation. La documentation parle tout à propos de l'analyse des documents pdf et ce qui n'est pas, mais n'est pas spécifique sur la façon de détecter les robinets de liaison et quoi pas (merci apple).

Répondre

5

Je ne peux pas commenter sur UIWebView, mais les trucs de CGPDF font partie de CoreGraphics. Donc, c'est principalement pour le dessin - vous aurez un objet PDF et un contexte pour le dessiner (presque certainement reçu via une sous-classe personnalisée de UIView) et lui demander de dessiner à une certaine échelle et position. Si vous êtes nouveau dans les sous-classes CoreGraphics et/ou UIView personnalisées, il faudra peut-être un jour ou deux pour y accéder, mais au pire, cela se traduira par quelques centaines de lignes. CoreGraphics ne connaît rien à l'interaction de l'utilisateur, donc je pense qu'Apple a pensé implicitement qu'il n'y a pas de concept de taps là-bas, et donc pas moyen que CoreGraphics puisse vous aider directement à attraper les taps.

Il existe un exemple de code pour charger un fichier PDF et le placer dans un contexte situé en haut de this document. CoreGraphics est le même sur OS X et iOS, sauf que le système de coordonnées initial est à l'opposé. Sur OS X, c'est la même chose qu'un PDF, sur iOS c'est le contraire, donc les fichiers PDF seront rendus inversés le long de y s'ils ne sont pas ajustés. La section directement après l'exemple de code d'affichage est intitulée 'Créer une transformation pour une page PDF' et devrait vous aider - vous devez juste appliquer une transformation qui inverse y.

Il existe un tutorial here sur la façon de créer une sous-classe UIView personnalisée qui inclut des étapes de dessin CoreGraphics.

En ce qui concerne les robinets d'accrochage, les choses deviennent un peu plus compliquées. Vous n'avez pas besoin de faire quoi que ce soit comme une inspection PDF complète en raison de la façon dont le format de fichier fonctionne. Les choses qui sont des liens sont attirées par l'apparence, mais elles devraient ressembler aux opérations PDF normales que CoreGraphics peut gérer pour vous. Il y a ensuite des tableaux séparés qui décrivent les rectangles de la boîte englobante pour attraper les robinets et les liens vers lesquels ils doivent aller. Ces tableaux sont analysés dans un format facile à lire par CoreGraphics mais pas inspecté. Ainsi, vous disposez de tous les outils pour savoir où se trouvent les liens sans avoir à en apprendre trop sur le format de fichier, mais vous devez tout de même les utiliser vous-même.

La construction CoreGraphics pertinente est le CGPDFDictionary. Vous pouvez saisir la dernière spécification PDF here, mais 99% d'entre elles ne vous concernent pas ou couvrent des éléments que CoreGraphics implémente déjà. Vous devrez passer d'une documentation à l'autre pour regrouper tous les bits, mais vous pouvez passer à la section 8.4 sur les annotations, à la page 488.

Cela finit par être une combinaison assez complexe de bits de code et je ne peux pas publier le mien pour des raisons commerciales, mais vous voulez créer un mappage des noms de pages aux numéros de pages, parcourir les annotations de liens (qui sont des liens vers des pages nommées) et faire quelque chose pour attraper les robinets. Personnellement, je viens d'ajouter des UIButtons invisibles comme sous-vues de ma vue PDF personnalisée. Évidemment, toute transformation que vous appliquez au PDF doit également être appliquée aux coordonnées d'annotation.

Le total était peut-être 1000 lignes.

Questions connexes