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