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:
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é int
s 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.
Pdf-annotation est une source ouverte et un bon point de départ pour https://code.google.com/p/pdf-annotation/