Как сделать аннотации, такие как выделение, зачеркивание, подчеркивание, рисование, добавление текста и т. Д. В Android для просмотра PDF? - PullRequest
69 голосов
/ 06 февраля 2012
  • Многие приложения, такие как RepliGo, Aldiko, Mantano, ezPdf на Android Market, делают аннотации этого типа в своей программе просмотра PDF, показанной на изображении ниже.
  • Я пытался реализовать эту аннотацию разными способами, но потерпел неудачу. У меня есть просмотрщик PDF для Android и отдельный код Java для аннотаций, используя iText для рисования линий.
  • У меня вопрос, могу ли я реализовать iText в Android. Если это возможно, какой пакет мне нужно импортировать?
  • Также в некоторых приложениях для рисования линий используется метод canvas. Можно ли включить этот метод холста в Android вместо использования аннотации? Цель состоит в том, чтобы иметь те же функции, что и аннотации.
  • На изображении ниже (RepliGo PDF Reader) какой код они использовали для аннотаций? enter image description here

Ответы [ 2 ]

6 голосов
/ 05 мая 2012

Ваш вопрос, по-видимому, заключается в том, какие методы позволяют пользователям аннотировать PDF-файл в android / java, так что вот один из способов, хотя это может быть не лучшим решением.

I 'Я хотел бы отметить, что на самом деле нет необходимости редактировать фактический файл PDF, чтобы пользователи могли добавлять и просматривать аннотации.Ваше приложение может просто хранить данные для аннотаций отдельно, сохранять эти аннотации для каждого файла и загружать их при загрузке файла.

Это означает, что оно не будет создавать новый файл PDF с размещенными им аннотациями,но вместо этого он будет просто хранить пользовательские данные для каждого файла PDF, который загружен в ваше приложение, и отображать их, когда пользователь снова загружает файл PDF.(Так что, похоже, аннотировано).

Пример:

  1. Считывание текста PDF-файла, форматирование текста и изображений в ваше приложение
  2. Отображение документа (например, текстового процессора)
  3. Разрешить пользователю редактировать и аннотировать документ
  4. Сохранять изменения и данные аннотаций в вашем приложении (не файл PDF)
  5. При повторной загрузке файла применять ранее сохраненные изменения и аннотации.

Ваш класс аннотаций может выглядеть примерно так:

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 s для двух позиций startPos и endPos, вы также можете использовать две или более переменных для ссылки на индексы массивов, индексы таблиц базы данных SQLite, позиции символов для простых текстовых документов;какой бы ни была ваша реализация, вы можете просто изменить это так, чтобы вы знали, где начинать аннотирование и где заканчивать аннотирование этим AnnotationType.

Кроме того, вы можете настроить прослушиватели изменения свойств, чтобы при изменении свойств аннотации ониЗапустите методы для обновления вашего дисплея / представления.

0 голосов
/ 29 января 2014

Pdf-аннотации с открытым исходным кодом и хорошая точка для начала с https://code.google.com/p/pdf-annotation/

...