web-dev-qa-db-ja.com

Android PDFビューアの場合、ハイライト、取り消し線、下線、描画、テキストの追加などの注釈を作成する方法は?

  • AndroidマーケットのRepliGo、Aldiko、Mantano、ezPdfなどの多くのアプリケーションは、下の画像に示すように、PDFビューアでこのタイプの注釈を作成します。
  • このアノテーションを実装するためにさまざまな方法で試しましたが、失敗しました。 AndroidのPDFビューアと、線を描画するためにiTextを使用する注釈のJavaコードを分離しています。
  • 私の質問は、AndroidにiTextを実装できるかどうかです。可能であれば、どのパッケージをインポートする必要がありますか?
  • また、一部のアプリケーションでは、キャンバスメソッドを使用して線を描画します。アノテーションを使用する代わりに、このキャンバスメソッドをAndroid=に含めることは可能ですか?)目標は、アノテーションと同じ機能を持つことです。
  • 下の画像(RepliGo PDF Reader))では、注釈にどの種類のコードを使用しましたか? enter image description here
69
BobDroid

あなたの質問は、ユーザーがPDFファイルに注釈を付けることができるようにする方法とはどのようなものかということです。したがって、最善の解決策ではないかもしれませんが、ここに1つの方法があります。

実際に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;
}

つまり、注釈表示データをここに格納するだけであり、ファイルとそれぞれの(シリアル化された)注釈オブジェクトを読み込むときに、各注釈を使用して、ドキュメント内のstartPosendPosの間の文字の表示方法に影響を与えることができます。

intstartPosの2つの位置にendPossを使用しましたが、2つ以上の変数を使用して配列インデックス、SQLiteデータベーステーブルインデックス、単純なテキストドキュメントのchar位置を参照することもできます。実装が何であれ、それを変更して、注釈を開始する場所と注釈を終了する場所をそのAnnotationTypeで知ることができます。

また、プロパティの変更リスナーを設定して、アノテーションのプロパティが変更されたときにメソッドを起動して表示/ビューを更新することもできます。

6
Ozzy

Pdf-annotationはオープンソースであり、 https://code.google.com/p/pdf-annotation/ から始めるのが適切です。

0
Ravi K. Sharma