Thư viện trình xem PDF của Jetpack, được hỗ trợ bởi các API của khung, cung cấp một giải pháp hiệu quả, có sẵn cho các ứng dụng liên quan đến tài liệu PDF trên Android.
Thư viện trình xem PDF (androidx.pdf) cung cấp một giao diện người dùng trình xem PDF có thể nhúng, cho phép người dùng làm những việc sau:
- Mở và xem tài liệu PDF
- Tìm kiếm và chọn nội dung
- Thu phóng và cuộn
- Lưu chú thích trong tài liệu
- Tương tác với tệp PDF bằng bút cảm ứng
Bạn có thể tạo trải nghiệm PDF đầy đủ tính năng bằng cách tích hợp các API thư viện Jetpack hoặc sử dụng trực tiếp các API khung.
Thư viện Jetpack PDF
Thư viện Jetpack PDF cung cấp lớp PdfViewerFragment để hiển thị tài liệu PDF, bao gồm cả PDF phân trang. Mỗi trang được kết xuất trong khung hiển thị riêng. PdfViewerFragment hiển thị một nút thao tác nổi để hỗ trợ chú thích và thường bao gồm một nút hoặc chế độ kiểm soát khác trên giao diện người dùng để mở một trình đơn tìm kiếm.
Để tìm hiểu cách triển khai PdfViewerFragment, hãy xem bài viết Triển khai trình xem PDF.
Framework API
Thư viện Jetpack sử dụng các API khung để phân tích cú pháp và tải tài liệu PDF.
PdfRenderer cung cấp các API khung cơ bản liên quan đến việc kết xuất PDF.
Trước Android V (API cấp 35), các lớp PdfRenderer và PdfRenderer.Page cung cấp các API để xử lý PDF. Các lớp PdfRenderer và PdfRenderer.Page đã được cập nhật trong Android V với các chức năng nâng cao dành cho tệp PDF.
PdfRenderer
Các API trước Android V
getPageCount()– Lấy số trang trong tài liệu.openPage(index: Int)– Mở một trang để hiển thị.shouldScaleForPrinting()– Lấy thông tin về việc có nên điều chỉnh tỷ lệ tài liệu để in hay không. Hãy cân nhắc thông tin này nếu tài liệu được kết xuất để in và kích thước phương tiện mục tiêu khác với kích thước trang.
Các API được thêm vào Android V
PdfRenderer(fileDescriptor: ParcelFileDescriptor, params: LoadParams)– Tạo một thực thể mới. Hỗ trợ tải tệp PDF được bảo vệ bằng mật khẩu.getDocumentLinearizedType()– Trả về loại tài liệu được tuyến tính hoá cho các tệp PDF có kích thước nhỏ hơn 1 KB.getPdfFormType()– Trả về loại biểu mẫu của tệp PDF đã tải.write(destination: ParcelFileDescriptor, removePasswordProtection: Boolean)– Lưu trạng thái của tài liệu hiện đang được tải vào trình mô tả tệp có thể ghi được truyền dưới dạng một đối số.
PdfRenderer.Page
Lớp PdfRenderer.Page biểu thị một trang tài liệu PDF để kết xuất.
Các API trước Android V
RENDER_MODE_FOR_DISPLAY– Chế độ hiển thị nội dung trên màn hình.RENDER_MODE_FOR_PRINT– Chế độ hiển thị nội dung để in.getIndex()– Lấy chỉ mục trang.getWidth()– Lấy chiều rộng trang tính bằng điểm (1/72 inch).getHeight()– Lấy chiều cao trang tính bằng điểm (1/72 inch).render(destination: Bitmap, destClip: Rect?, transform: Matrix?, renderMode: Int)– Kết xuất một trang thành bitmap.
Các API được thêm vào Android V
applyEdit(editRecord: FormEditRecord)– Áp dụng mộtFormEditRecordcho tệp PDF.getFormWidgetInfos()– Trả về thông tin về tất cả các tiện ích biểu mẫu trên trang.getFormWidgetInfos(types: IntArray)– Trả về thông tin về tất cả các tiện ích biểu mẫu thuộc các loại được chỉ định trên trang.getFormWidgetInfoAtIndex(widgetIndex: Int)– Trả về thông tin về tiện ích do đối sốwidgetIndexxác định.fun getFormWidgetInfoAtPosition(x: Int, y: Int)– Trả về thông tin về tiện ích tại một điểm cụ thể.getGotoLinks()– Lấy dấu trang và đường liên kết chuyển đến có trên trang của một tài liệu PDF.getImageContents()– Trả về danh sáchPdfPageImageContentcó trên trang.getLinkContents()– Lấy ranh giới và URL của tất cả các đường liên kết trên trang.getTextContents()– Trả về danh sáchPdfPageTextContenttrên trang.render(destination: Bitmap, destClip: Rect?, transform: Matrix?, params: RenderParams)– Kết xuất một trang thành bitmap.searchText(query: String)– Tìm kiếm chuỗi đã cho trên trang và trả về ranh giới của tất cả kết quả trùng khớp.selectContent(start: SelectionBoundary, stop: SelectionBoundary)– Trả về mộtPageSelectionbiểu thị nội dung giữa hai ranh giới.
Sử dụng API
API
PdfRenderer#write()ghi một phiên bản của tệp PDF đã tải vàoParcelFileDescriptor. Các trường hợp sử dụng bao gồm:- Lưu bản sao của tài liệu PDF sau khi xoá biện pháp bảo mật bằng mật khẩu
- Lưu nội dung chỉnh sửa (chú thích, điền biểu mẫu, v.v.)
Các API
PdfRenderer.Page#render()kết xuất một trang hoặc một phần của trang thành một bitmap. Trong trường hợp thu phóng, bạn cũng có thể dùng API này để kết xuất một phần của trang thành một bitmap có kích thước nhất định.Các API
PdfRenderer.PagegetImageContents(),getLinkContents()vàgetTextContents()trả về nội dung có trên trang. Bạn có thể sử dụng nội dung này cho các thông báo về TalkBack và hỗ trợ tiếp cận hoặc trong các tính năng dựa trên AI, chẳng hạn như tạo bản tóm tắt trang.API
PdfRenderer.Page#selectContentchọn nội dung có trên một trang. Bạn có thể dùng nội dung đã chọn cho các thao tác như sau:- Gọi điện nếu có số điện thoại
- Bản đồ, nếu bạn chọn một địa chỉ
- Sao chép
- Chia sẻ
- Bình luận
Khả năng tương thích
Lớp PdfRendererPreV hiển thị các API Android V trên Android R thông qua U (cấp độ API 30–34).
Tài nguyên khác
Hãy xem phần Triển khai trình xem PDF để tìm hiểu cách thêm trình xem PDF vào ứng dụng của bạn.