Jetpack PDF 檢視器程式庫以架構 API 為基礎,為 Android 上的 PDF 文件相關應用程式提供現成的高效能解決方案。
PDF 檢視器程式庫 (androidx.pdf) 提供可嵌入的 PDF 檢視器 UI,讓使用者執行下列操作:
- 開啟及查看 PDF 文件
- 搜尋及選取內容
- 縮放和捲動
- 儲存文件註解
- 使用觸控筆與 PDF 互動
您可以整合 Jetpack 程式庫 API,或直接使用架構 API,打造功能齊全的 PDF 體驗。
Jetpack PDF 程式庫
Jetpack PDF 程式庫提供 PdfViewerFragment 類別,可算繪 PDF 文件,包括分頁 PDF。每個網頁都會在各自的檢視畫面中算繪。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/72 英寸) 取得頁面高度。render(destination: Bitmap, destClip: Rect?, transform: Matrix?, renderMode: Int):將頁面算繪為點陣圖。
Android V 中新增的 API
applyEdit(editRecord: FormEditRecord):將FormEditRecord套用至 PDF。getFormWidgetInfos():傳回網頁上所有表單小工具的相關資訊。getFormWidgetInfos(types: IntArray):傳回網頁上指定類型所有表單小工具的相關資訊。getFormWidgetInfoAtIndex(widgetIndex: Int):傳回由widgetIndex引數識別的小工具相關資訊。fun getFormWidgetInfoAtPosition(x: Int, y: Int)- 傳回指定時間點的小工具資訊。getGotoLinks():取得 PDF 文件頁面上的書籤和前往連結。getImageContents():傳回網頁上找到的PdfPageImageContent清單。getLinkContents():取得網頁上所有連結的界線和網址。getTextContents():傳回頁面上的PdfPageTextContent清單。render(destination: Bitmap, destClip: Rect?, transform: Matrix?, params: RenderParams):將頁面算繪為點陣圖。searchText(query: String):在頁面中搜尋指定字串,並傳回所有相符項目的界線。selectContent(start: SelectionBoundary, stop: SelectionBoundary):傳回PageSelection,代表兩個邊界之間的內容。
API 使用方式
PdfRenderer#write()API 會將載入的 PDF 版本寫入ParcelFileDescriptor。用途包括:- 移除密碼保護後儲存 PDF 文件的副本
- 儲存編輯內容 (註解、填寫表單等)
PdfRenderer.Page#render()API 會將網頁或網頁的一部分算繪為點陣圖。如果是縮放,API 也可用於將部分網頁算繪成指定大小的點陣圖。PdfRenderer.PageAPIgetImageContents()、getLinkContents()和getTextContents()會傳回網頁上可用的內容。你可以將內容用於無障礙和 TalkBack 播報,或用於 AI 輔助功能,例如生成網頁摘要。PdfRenderer.Page#selectContentAPI 會選取網頁上可用的內容。您可以對所選內容執行下列動作:- 如果顯示電話號碼,可以直接撥號
- 如果選取地址,可以開啟 Google 地圖
- 複製
- 分享
- 留言
相容性
PdfRendererPreV 類別會在 Android R 到 U (API 級別 30 到 34) 上公開 Android V API。
其他資源
請參閱「實作 PDF 檢視器」,瞭解如何在應用程式中新增 PDF 檢視器。