フレームワーク 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.PageAPI のgetImageContents()、getLinkContents()、getTextContents()は、ページで利用可能なコンテンツを返します。このコンテンツは、ユーザー補助機能や TalkBack のアナウンス、AI 対応機能(ページの要約の生成など)で使用できます。PdfRenderer.Page#selectContentAPI は、ページで利用可能なコンテンツを選択します。選択したコンテンツは、次のようなアクションに使用できます。- 電話番号の場合、電話をかける
- マッピングする(住所が選択されている場合)
- コピー
- 共有
- コメント
互換性
PdfRendererPreV クラスは、Android R から U(API レベル 30 ~ 34)で Android V API を公開します。
参考情報
アプリに PDF ビューアを追加する方法については、PDF ビューアを実装するをご覧ください。