Android PDF ビューア

フレームワーク API に支えられた Jetpack PDF ビューア ライブラリは、Android の PDF ドキュメント関連アプリ向けの、すぐに使用できる高性能なソリューションを提供します。

PDF ビューア ライブラリ(androidx.pdf)は、ユーザーが次の操作を行える埋め込み可能な PDF ビューア UI を提供します。

  • PDF ドキュメントを開いて表示する
  • コンテンツを検索して選択する
  • ズームとスクロール
  • ドキュメントのアノテーションを保存する
  • タッチペンを使用して PDF を操作する

Jetpack ライブラリ API を統合するか、フレームワーク API を直接使用することで、フル機能の PDF エクスペリエンスを作成できます。

Jetpack PDF ライブラリ

Jetpack PDF ライブラリは、ページ分割された PDF を含む PDF ドキュメントをレンダリングする PdfViewerFragment クラスを提供します。各ページは独自のビューでレンダリングされます。PdfViewerFragment は、アノテーションのサポートのためのフローティング アクション ボタンを表示し、通常は検索メニューを開くボタンまたはその他の UI コントロールを含みます。

PdfViewerFragment を実装する方法については、PDF ビューアを実装するをご覧ください。

フレームワーク API

Jetpack ライブラリは、フレームワーク API を使用して PDF ドキュメントを解析し、読み込みます。PdfRenderer は、PDF レンダリングに関連する基本的なフレームワーク API を提供します。

Android V(API レベル 35)より前は、PdfRenderer クラスと PdfRenderer.Page クラスが PDF 処理用の API を提供していました。Android V で、PdfRenderer クラスと PdfRenderer.Page クラスが高度な PDF 機能で更新されました。

PdfRenderer

Android V より前の API

  • getPageCount() - ドキュメントのページ数を取得します。
  • openPage(index: Int) - レンダリング用のページを開きます。
  • shouldScaleForPrinting() - ドキュメントを印刷用にスケーリングする必要があるかどうかを取得します。ドキュメントが印刷用にレンダリングされ、ターゲット メディアのサイズがページサイズと異なる場合は、この情報を考慮してください。

Android V で追加された API

  • PdfRenderer(fileDescriptor: ParcelFileDescriptor, params: LoadParams) — 新しいインスタンスを構築します。パスワードで保護された PDF の読み込みをサポート。
  • getDocumentLinearizedType() - 1 KB 未満の PDF の場合、ドキュメントの線形化されたタイプを返します。
  • getPdfFormType() - 読み込まれた PDF のフォームタイプを返します。
  • write(destination: ParcelFileDescriptor, removePasswordProtection: Boolean) - 現在読み込まれているドキュメントの状態を、引数として渡された書き込み可能なファイル記述子に保存します。

PdfRenderer.Page

PdfRenderer.Page クラスは、レンダリング用の PDF ドキュメント ページを表します。

Android V より前の API

  • RENDER_MODE_FOR_DISPLAY - 画面に表示するコンテンツをレンダリングするモード。
  • RENDER_MODE_FOR_PRINT - 印刷用にコンテンツをレンダリングするモード。
  • getIndex() - ページ インデックスを取得します。
  • getWidth() - ページの幅をポイント(1/72 インチ)で取得します。
  • getHeight() - ページの高さ(ポイント単位、1 ポイントは 1/72 インチ)を取得します。
  • render(destination: Bitmap, destClip: Rect?, transform: Matrix?, renderMode: Int) - ページをビットマップにレンダリングします。

Android V で追加された API

  • applyEdit(editRecord: FormEditRecord) - PDF に FormEditRecord を適用します。
  • getFormWidgetInfos() - ページ上のすべてのフォーム ウィジェットに関する情報を返します。
  • getFormWidgetInfos(types: IntArray) - ページ上の指定されたタイプのすべてのフォーム ウィジェットに関する情報を返します。
  • getFormWidgetInfoAtIndex(widgetIndex: Int) - widgetIndex 引数で識別されるウィジェットに関する情報を返します。
  • fun getFormWidgetInfoAtPosition(x: Int, y: Int) - 指定されたポイントのウィジェットに関する情報を返します。
  • getGotoLinks() - PDF ドキュメントのページにあるブックマークと移動リンクを取得します。
  • getImageContents() - ページで見つかった PdfPageImageContent のリストを返します。
  • getLinkContents() - ページ上のすべてのリンクの境界と URL を取得します。
  • getTextContents() - ページ上の PdfPageTextContent のリストを返します。
  • render(destination: Bitmap, destClip: Rect?, transform: Matrix?, params: RenderParams) - ページをビットマップにレンダリングします。
  • searchText(query: String) - ページ内で指定された文字列を検索し、一致したすべての文字列の境界を返します。
  • selectContent(start: SelectionBoundary, stop: SelectionBoundary) - 2 つの境界の間のコンテンツを表す PageSelection を返します。

API の使用方法

  • PdfRenderer#write() API は、読み込まれた PDF のバージョンを ParcelFileDescriptor に書き込みます。ユースケースには、次のようなものがあります。

    • パスワード セキュリティを削除した後に PDF ドキュメントのコピーを保存する
    • 編集内容(アノテーション、フォームへの入力など)を保存する
  • PdfRenderer.Page#render() API は、ページまたはページの一部をビットマップにレンダリングします。ズームの場合、API を使用して、ページの特定の部分を指定されたサイズのビットマップにレンダリングすることもできます。

  • PdfRenderer.Page API の getImageContents()getLinkContents()getTextContents() は、ページで利用可能なコンテンツを返します。このコンテンツは、ユーザー補助機能や TalkBack のアナウンス、AI 対応機能(ページの要約の生成など)で使用できます。

  • PdfRenderer.Page#selectContent API は、ページで利用可能なコンテンツを選択します。選択したコンテンツは、次のようなアクションに使用できます。

    • 電話番号の場合、電話をかける
    • マッピングする(住所が選択されている場合)
    • コピー
    • 共有
    • コメント

互換性

PdfRendererPreV クラスは、Android R から U(API レベル 30 ~ 34)で Android V API を公開します。

参考情報

アプリに PDF ビューアを追加する方法については、PDF ビューアを実装するをご覧ください。