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

2 に答える 2

6

あなたの質問は、ユーザーが android/java で PDF ファイルに注釈を付けられるようにする方法のようです.

ユーザーが注釈を追加して表示できるようにするためだけに、実際の 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;
}

したがって、ここに注釈表示データを保存するだけで、ファイルとそれぞれの (シリアル化された) Annotations オブジェクトをロードすると、各注釈を使用して、ドキュメント内のstartPosとの間の文字の表示方法に影響を与えることができendPosます。

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

また、注釈プロパティが変更されたときにメソッドを起動してディスプレイ/ビューを更新するように、プロパティ変更リスナーを設定することもできます。

于 2012-05-05T16:31:50.197 に答える
0

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

于 2014-01-29T08:00:30.717 に答える