java - programa - ¿Cómo hacer anotaciones como resaltar, tachar, subrayar, dibujar, agregar texto, etc. en Android para un visor de PDF?
programa para hacer comentarios en pdf (2)
- Muchas aplicaciones como RepliGo, Aldiko, Mantano, ezPdf en el mercado de Android hacen este tipo de anotaciones en su visor de PDF que se muestra en la imagen de abajo.
- Intenté de muchas maneras implementar esta anotación, pero fallé. Tengo un visor de pdf para Android y un código java por separado para anotaciones usando iText para dibujar líneas.
- Mi pregunta es si puedo implementar iText en Android. Si es posible, ¿qué paquete debo importar?
- También en algunas aplicaciones, se usa un método de lienzo para dibujar líneas. ¿Es posible incluir este método de lienzo en Android en lugar de usar una anotación ?. El objetivo sería tener las mismas características que las anotaciones.
- En la imagen de abajo (RepliGo PDF Reader), ¿qué tipo de código usaron para las anotaciones?
La anotación en PDF es una fuente abierta y un buen punto para comenzar con https://code.google.com/p/pdf-annotation/
Su pregunta parece ser cuáles son los métodos para permitir a los usuarios hacer anotaciones sobre un archivo PDF en android / java, por lo que este es un método para usted, aunque puede que no sea la mejor solución.
Me gustaría señalar que no es realmente necesario editar el archivo PDF real solo para permitir a los usuarios agregar y ver anotaciones. Su aplicación podría simplemente almacenar los datos para las anotaciones por separado, almacenar esas anotaciones para cada archivo y cargarlas cuando se cargue el archivo.
Eso significa que no creará un nuevo archivo PDF con esas anotaciones, sino que almacenará datos de usuario para cada archivo PDF que se cargue en su aplicación, y lo mostrará cuando el usuario cargue nuevamente el archivo PDF. (Entonces parece estar anotado).
Ejemplo:
- Lea el texto del archivo PDF, el formato de texto y las imágenes en su aplicación
- Mostrar un documento (como un procesador de textos)
- Permitir al usuario editar y anotar el documento
- Guarde los cambios y los datos de las anotaciones en su aplicación (no en el archivo PDF)
- Cuando vuelva a cargar el archivo, aplique los cambios y las anotaciones previamente almacenados.
Tu clase de anotación puede verse más o menos así:
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;
}
Así que solo está almacenando los datos de visualización de anotación aquí, y cuando carga el archivo y su respectivo objeto de anotaciones (serializado), puede usar cada anotación para afectar la forma en que visualiza los caracteres entre los startPos
y los endPos
en su documento.
Aunque he utilizado int
s para las dos posiciones startPos
y endPos
, también puede usar dos o más variables para referirse a índices de matriz, índices de tabla de base de datos SQLite, posiciones de char para documentos de texto simples; cualquiera que sea su implementación, puede cambiar eso para saber dónde comenzar a anotar y dónde finalizar la anotación con ese tipo de anotación.
Además, puede configurar detectores de cambios de propiedad para que, cuando se modifiquen las propiedades de anotación, se desactiven los métodos para actualizar su visualización / visualización.