Как сделать аннотации, такие как выделение, зачеркивание, подчеркивание, рисование, добавление текста и т. Д. В Android для просмотра PDF?
- Многие приложения, такие как RepliGo, Aldiko, Mantano, ezPdf на Android Market, делают этот тип аннотации в своей программе просмотра PDF, показанной на изображении ниже.
- Я пытался реализовать эту аннотацию разными способами, но потерпел неудачу. У меня есть просмотрщик PDF для Android и отдельный код Java для аннотаций, используя iText для рисования линий.
- Мой вопрос, могу ли я реализовать iText в Android. Если это возможно, какой пакет мне нужно импортировать?
- Также в некоторых приложениях метод canvas используется для рисования линий. Можно ли включить этот метод холста в Android вместо использования аннотации? Цель состоит в том, чтобы иметь те же функции, что и аннотации.
- На изображении ниже (RepliGo PDF Reader) какой код они использовали для аннотаций?
2 ответа
Похоже, ваш вопрос заключается в том, какие методы позволяют пользователям аннотировать PDF-файл в android/java, так что вот один из них, хотя это может быть не лучшим решением.
Я хотел бы отметить, что на самом деле нет необходимости редактировать фактический файл PDF, чтобы пользователи могли добавлять и просматривать аннотации. Ваше приложение может просто хранить данные для аннотаций отдельно, сохранять эти аннотации для каждого файла и загружать их при загрузке файла.
Это означает, что он не будет создавать новый PDF-файл с размещенными в нем аннотациями, а просто будет хранить пользовательские данные для каждого PDF-файла, загруженного в ваше приложение, и отображать его, когда пользователь снова загружает PDF-файл. (Так что, похоже, аннотировано).
Пример:
- Читайте текст PDF-файла, форматирование текста и изображения в вашем приложении
- Показать документ (например, текстовый процессор)
- Разрешить пользователю редактировать и аннотировать документ
- Сохраняйте изменения и аннотации в вашем приложении (не в PDF-файле)
- При загрузке файла снова примените изменения и аннотации, ранее сохраненные.
Ваш класс аннотаций может выглядеть примерно так:
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;
}
Таким образом, вы просто сохраняете данные для отображения аннотаций здесь, и когда вы загружаете файл и соответствующий ему (сериализованный) объект "Аннотации", вы можете использовать каждую аннотацию, чтобы повлиять на способ отображения символов между startPos
а также endPos
в вашем документе.
Хотя я использовал int
с на две позиции startPos
а также endPos
Вы также можете использовать две или более переменных для ссылки на индексы массивов, индексы таблиц базы данных SQLite, позиции символов для простых текстовых документов; какой бы ни была ваша реализация, вы можете просто изменить это так, чтобы вы знали, где начинать аннотировать и где заканчивать аннотирование этим AnnotationType.
Кроме того, вы можете настроить прослушиватели изменения свойств, чтобы при изменении свойств аннотации они запускали методы для обновления вашего отображения / представления.
Pdf-аннотация - это открытый исходный код, с которого можно начать с https://code.google.com/p/pdf-annotation/