2010-08-27 5 views
3

J'essaie de mettre en œuvre la recherche en texte intégral en utilisant Quartz 2D mais c'est un cauchemar. je peux « extrait » texte de la page PDF à l'aide de l'opérateur PDF (TJ et d'autres ...)Pdf recherche plein texte sur iPad avec Quartz 2D

CGPDFOperatorTableRef myTable; 

myTable = CGPDFOperatorTableCreate(); 

CGPDFOperatorTableSetCallback (myTable, "BT", &op_BT); 
CGPDFOperatorTableSetCallback (myTable, "Td", &op_Td); 
CGPDFOperatorTableSetCallback (myTable, "TD", &op_TD); 
CGPDFOperatorTableSetCallback (myTable, "Tm", &op_Tm); 
CGPDFOperatorTableSetCallback (myTable, "T*", &op_T); 
CGPDFOperatorTableSetCallback (myTable, "TJ", &op_TJ); 
CGPDFOperatorTableSetCallback (myTable, "Tf", &op_TF); 
CGPDFOperatorTableSetCallback (myTable, "ET", &op_ET); 

Mais dans le même temps, je dois souligner un match à la page PDF avec un certain rectangle comme il est fait dans Safari par exemple. Des suggestions comment implémenter cela? Y a-t-il des solutions qui ne nécessitent pas un tel travail?

Répondre

4

Ceci est seulement la pointe de l'iceberg ...

Détection de la « octets » codé dans un TJ ne signifie pas que vous avez déjà « texte » ou même êtes en mesure de le reconvertir du tout.

En PDF sur le texte du dessin, il y a une police "active" (Tf). La police a un encodage - il y a beaucoup de codages différents et certains ne sont pas "inversibles" dans le sens où vous pouvez obtenir un encodage unicode.

Si vous avez un encodage "inversible", ça va. Il reste beaucoup de travail pour implémenter la recherche inversée (en particulier pour les encodages multi-octets ..) mais un beau jour vous avez terminé.

Si votre encodage n'est pas très intelligent, vous pouvez toujours avoir une carte ToUnicode supplémentaire qui permet de calculer un Unicode. Un effort supplémentaire, mais maintenant votre amende.

... Outre les nombreux documents existants autour qui prennent en charge aucune de ces applications à unicode ...

... et après tout: PDF ne contient pas « texte » en ce sens, il dessine des personnages. Donc, en théorie, vous devez dessiner les caractères dans une page virtuelle avant de pouvoir les trier dans un ordre lisible ...

Dans l'ensemble, c'est très amusant.

+0

Merci mtraut ... j'ai terminé pour obtenir du texte en utilisant l'opérateur TJ/Tj ... mais quand l'encodage de police est Identity-H. cela crée un problème pour obtenir du texte ... je ne sais pas comment obtenir du texte en utilisant le mappage ToUnicode? –

+0

Il faudrait beaucoup de commentaires pour décrire la mécanique d'extraction de texte. Au lieu de cela, je voudrais que vous recommandiez la spécification PDF (** La référence complète **) ou une implémentation existante comme jPod. En Java, vous devriez avoir une bonne idée de la recherche de personnage. – mtraut

+0

En bref: Si vous avez un ToUnicode, vous n'aurez pas besoin de l'encodage. Prenez l'entrée (éventuellement multi-octets!) Pour le caractère suivant et la carte via le ToUnicode. Ceci est un outil de cartographie multi-index sophistiqué - vous aurez le mettre en œuvre. Le résultat devrait être votre caractère unicoce – mtraut