web-dev-qa-db-de.com

Wie mache ich Anmerkungen wie Hervorheben, Durchstreichen, Unterstreichen, Zeichnen, Hinzufügen von Text usw. in Android für einen PDF-Viewer?

  • Viele Anwendungen wie RepliGo, Aldiko, Mantano, ezPdf im Android Market machen diese Art von Annotation in ihrem PDF-Viewer (siehe Bild unten).
  • Ich habe auf viele Arten versucht, diese Annotation zu implementieren, aber ich bin gescheitert. Ich habe einen PDF-Viewer für Android und einen separaten Java-Code für Anmerkungen mit iText zum Zeichnen von Linien.
  • Meine Frage ist, ob ich iText in Android implementieren kann. Wenn es möglich ist, welches Paket muss ich importieren?
  • In einigen Anwendungen wird auch eine Canvas-Methode zum Zeichnen von Linien verwendet. Ist es möglich, diese Canvas-Methode in Android einzuschließen, anstatt eine Anmerkung zu verwenden? Das Ziel wäre, die gleichen Funktionen wie Annotationen zu haben.
  • In der folgenden Abbildung (RepliGo PDF Reader) wurde welche Art von Code für Anmerkungen verwendet? enter image description here
69
BobDroid

Ihre Frage scheint zu sein, welche Methoden es Benutzern erlauben, über eine PDF -Datei in Android/Java Anmerkungen zu machen. Daher haben wir hier eine Methode für Sie, auch wenn dies nicht die beste Lösung ist.

Ich möchte darauf hinweisen, dass es nicht unbedingt erforderlich ist, die eigentliche PDF -Datei zu bearbeiten, nur damit Benutzer Anmerkungen hinzufügen und anzeigen können. Ihre Anwendung könnte die Daten für Anmerkungen einfach speichern, diese Anmerkungen für jede Datei speichern und sie laden, wenn die Datei geladen wird.

Das bedeutet, dass keine neue PDF -Datei mit diesen Anmerkungen erstellt wird, sondern nur Benutzerdaten für jede PDF -Datei gespeichert werden, die in Ihre App geladen wird, und zeigen Sie dies an, wenn der Benutzer die Datei PDF erneut lädt. (Es scheint also kommentiert zu werden). 

Beispiel:

  1. Lesen Sie PDF Dateitext, Textformatierung und Bilder in Ihre App 
  2. Ein Dokument anzeigen (wie eine Textverarbeitung) 
  3. Erlauben Sie dem Benutzer, das Dokument zu bearbeiten und mit Anmerkungen zu versehen 
  4. Speichern Sie die Änderungen und Anmerkungsdaten in Ihrer App (nicht die Datei PDF). 
  5. Wenn Sie die Datei erneut laden, übernehmen Sie die zuvor gespeicherten Änderungen und Anmerkungen.

Ihre Anmerkungsklasse könnte in etwa so aussehen:

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

Sie speichern also nur die Anmerkungsanzeigedaten hier, und wenn Sie die Datei und das zugehörige (serialisierte) Anmerkungsobjekt laden, können Sie jede Annotation verwenden, um die Anzeige von Zeichen zwischen der Variablen startPos und endPos in Ihrem Dokument zu beeinflussen.

Obwohl ich ints für die beiden Positionen startPos und endPos verwendet habe, könnten Sie auch zwei oder mehr Variablen verwenden, um auf Arrayindizes, SQLite-Datenbanktabellenindizes und char-Positionen für einfache Textdokumente zu verweisen. Was auch immer Ihre Implementierung ist, Sie können dies einfach ändern, sodass Sie wissen, wo Sie mit dem Annotieren beginnen und wo Sie das Annotieren mit diesem AnnotationType beenden.

Sie können auch Eigenschaftsänderungslistener einrichten, damit bei Änderung der Anmerkungseigenschaften Methoden zum Aktualisieren der Anzeige/Ansicht ausgelöst werden.

6
Ozzy

Pdf-Annotation ist eine offene Quelle und ein guter Anfangspunkt für https://code.google.com/p/pdf-annotation/

0
Ravi K. Sharma