web-dev-qa-db-fra.com

Comment créer des annotations telles que surligner, barrer, souligner, dessiner, ajouter du texte, etc. dans Android pour un lecteur de pdf?

  • De nombreuses applications telles que RepliGo, Aldiko, Mantano, ezPdf sur le marché Android génèrent ce type d'annotation dans leur visionneur pdf, présenté dans l'image ci-dessous.
  • J'ai essayé de plusieurs manières d'implémenter cette annotation mais j'ai échoué. J'ai une visionneuse pdf pour Android et du code Java séparé pour les annotations en utilisant iText pour tracer des lignes. 
  • Ma question est la suivante: puis-je implémenter iText dans Android? Si c'est possible, quel paquet dois-je importer?
  • De plus, dans certaines applications, une méthode de dessin est utilisée pour dessiner des lignes. Est-il possible d'inclure cette méthode de dessin dans Android au lieu d'utiliser une annotation?. L’objectif serait d’avoir les mêmes fonctionnalités que les annotations. 
  • Dans l'image ci-dessous (Lecteur RepliGo PDF), quel type de code ont-ils utilisé pour les annotations? enter image description here
69
BobDroid

Votre question semble porter sur les méthodes permettant aux utilisateurs d'annoter un fichier PDF sous Android/Java. Voici donc une méthode pour vous, même si ce n'est peut-être pas la meilleure solution.

J'aimerais souligner qu'il n'est pas réellement nécessaire de modifier le fichier PDF pour permettre aux utilisateurs d'ajouter et d'afficher des annotations. Votre application pourrait simplement stocker les données pour les annotations séparément, stocker ces annotations pour chaque fichier et les charger lors du chargement du fichier.

Cela signifie qu'il ne créera pas de nouveau fichier PDF avec les annotations placées, mais qu'il stockera simplement les données utilisateur pour chaque fichier PDF chargé dans votre application, et l'affichera lorsque le L'utilisateur charge à nouveau le fichier PDF. (Donc, il semble être annoté). 

Exemple:

  1. Lire le texte PDF du fichier, le formatage du texte et les images dans votre application 
  2. Afficher un document (comme un traitement de texte) 
  3. Autoriser l'utilisateur à éditer et annoter le document 
  4. Enregistrer les modifications et les données d'annotation dans votre application (pas le fichier PDF) 
  5. Lors du chargement du fichier à nouveau, appliquez les modifications et annotations stockées précédemment.

Votre classe d'annotation pourrait ressembler à ceci:

class Annotations implements Serializable {

    public Annotations() {
        annotations = new HashSet<Annotation>();
    }

    public ArrayList<Annotation> getAnnotations() {
        return new ArrayList<Annotation>(annotations);
    }

    public Annotation annotate(int starpos, int endpos) {
        Annotation a = new Annotation(startpos, endpos);
        annotations.add(a);
        return a;
    }

    public void unannotate(Annotation a) {
        annotations.remove(a);
    }

    static enum AnnotationTypes {
        HIGHLIGHT, UNDERLINE;
    }

    class Annotation {
        int startPos, endPos;
        AnnotationTypes type;
        Color color;
        Annotation(int start, int end) {
          startPos = start;
          endPos = end;
        }
        public void update(int start, int end) {
          startPos = start;
          endPos = end;
        }
        public void highlight(int red, int green, int blue) {
            type = AnnotationTypes.HIGHLIGHT;
            color = new Color(red, green, blue);
        }
        public void underline(int red, int green, int blue) {
            type = AnnotationTypes.UNDERLINE;
            color = new Color(red, green, blue);
        }
        // getters
        ...
    }

    private Set<Annotation> annotations;
}

Ainsi, vous ne stockez que les données d'affichage d'annotation ici, et lorsque vous chargez le fichier et son objet Annotations (sérialisé) respectif, vous pouvez utiliser chaque annotation pour modifier le mode d'affichage des caractères entre startPos et endPos dans votre document.

Bien que j'ai utilisé ints pour les deux positions startPos et endPos, vous pouvez également utiliser deux variables ou plus pour faire référence à des index de tableau, des index de table de base de données SQLite, des positions de caractère pour des documents texte simples; Quelle que soit votre implémentation, vous pouvez simplement changer cela pour que vous sachiez par où commencer l'annotation et où mettre fin à l'annotation avec AnnotationType.

Vous pouvez également configurer des écouteurs de modification de propriété afin que, lorsque les propriétés d'annotation sont modifiées, elles déclenchent des méthodes pour mettre à jour votre affichage/vue.

6
Ozzy

Pdf-annotation est une source ouverte et un bon point de départ pour https://code.google.com/p/pdf-annotation/

0
Ravi K. Sharma