Trình xem PDF trên Android

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 PdfRendererPdfRenderer.Page cung cấp các API để xử lý PDF. Các lớp PdfRendererPdfRenderer.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ột FormEditRecord cho 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ố widgetIndex xá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ách PdfPageImageContent có 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ách PdfPageTextContent trê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ột PageSelection biể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ào ParcelFileDescriptor. 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.Page getImageContents(), getLinkContents()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#selectContent chọ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.