Przeglądarka PDF na Androida

Biblioteka przeglądarki plików PDF Jetpack, oparta na interfejsach API platformy, to gotowe, wydajne rozwiązanie dla aplikacji na Androida związanych z dokumentami PDF.

Biblioteka przeglądarki plików PDF (androidx.pdf) udostępnia interfejs przeglądarki plików PDF, który można osadzić i który umożliwia użytkownikom wykonywanie tych czynności:

  • Otwieranie i wyświetlanie dokumentów PDF
  • Wyszukiwanie i wybieranie treści
  • Powiększanie i przewijanie
  • Zapisywanie adnotacji w dokumencie
  • Interakcja z plikami PDF za pomocą rysika

Możesz utworzyć w pełni funkcjonalny plik PDF, integrując interfejsy API biblioteki Jetpack lub używając bezpośrednio interfejsów API platformy.

Biblioteka Jetpack PDF

Biblioteka Jetpack PDF udostępnia klasę PdfViewerFragment, która renderuje dokumenty PDF, w tym pliki PDF z podziałem na strony. Każda strona jest renderowana w osobnym widoku. PdfViewerFragment wyświetla pływający przycisk polecenia do obsługi adnotacji i zwykle zawiera przycisk lub inny element interfejsu, który otwiera menu wyszukiwania.

Aby dowiedzieć się, jak wdrożyć PdfViewerFragment, przeczytaj artykuł Implementowanie przeglądarki plików PDF.

Interfejsy API platformy

Biblioteka Jetpack używa interfejsów API platformy do analizowania i wczytywania dokumentów PDF. PdfRenderer udostępnia podstawowe interfejsy API związane z renderowaniem plików PDF.

Przed Androidem V (API na poziomie 35) klasy PdfRendererPdfRenderer.Page udostępniały interfejsy API do obsługi plików PDF. Klasy PdfRendererPdfRenderer.Page zostały zaktualizowane w Androidzie V i mają zaawansowane funkcje obsługi plików PDF.

PdfRenderer

Interfejsy API starsze niż Android V

  • getPageCount() – pobiera liczbę stron w dokumencie.
  • openPage(index: Int) – otwiera stronę do renderowania.
  • shouldScaleForPrinting() – określa, czy dokument powinien być skalowany do druku. Weź pod uwagę te informacje, jeśli dokument jest renderowany do druku, a rozmiar docelowego nośnika różni się od rozmiaru strony.

Interfejsy API dodane w Androidzie V

  • PdfRenderer(fileDescriptor: ParcelFileDescriptor, params: LoadParams) – tworzy nową instancję. Obsługuje wczytywanie plików PDF chronionych hasłem.
  • getDocumentLinearizedType() – zwraca zlinearyzowany typ dokumentu w przypadku plików PDF o rozmiarze mniejszym niż 1 KB.
  • getPdfFormType() – zwraca typ formularza załadowanego pliku PDF.
  • write(destination: ParcelFileDescriptor, removePasswordProtection: Boolean) – zapisuje stan aktualnie załadowanego dokumentu w deskryptorze pliku z możliwością zapisu przekazanym jako argument.

PdfRenderer.Page

Klasa PdfRenderer.Page reprezentuje stronę dokumentu PDF do renderowania.

Interfejsy API starsze niż Android V

  • RENDER_MODE_FOR_DISPLAY – tryb renderowania treści do wyświetlania na ekranie.
  • RENDER_MODE_FOR_PRINT – tryb renderowania treści do druku.
  • getIndex() – pobiera indeks strony.
  • getWidth() – zwraca szerokość strony w punktach (1/72 cala).
  • getHeight() – pobiera wysokość strony w punktach (1/72 cala).
  • render(destination: Bitmap, destClip: Rect?, transform: Matrix?, renderMode: Int) – renderuje stronę do bitmapy.

Interfejsy API dodane w Androidzie V

  • applyEdit(editRecord: FormEditRecord) – stosuje FormEditRecord do pliku PDF.
  • getFormWidgetInfos() – zwraca informacje o wszystkich widżetach formularzy na stronie.
  • getFormWidgetInfos(types: IntArray) – zwraca informacje o wszystkich widżetach formularzy określonych typów na stronie.
  • getFormWidgetInfoAtIndex(widgetIndex: Int) – zwraca informacje o widżecie określonym przez argument widgetIndex.
  • fun getFormWidgetInfoAtPosition(x: Int, y: Int) – zwraca informacje o widżecie w danym punkcie.
  • getGotoLinks() – pobiera zakładki i linki do przejścia na stronie dokumentu PDF.
  • getImageContents() – zwraca listę PdfPageImageContent znalezionych na stronie.
  • getLinkContents() – pobiera granice i adresy URL wszystkich linków na stronie.
  • getTextContents() – zwraca listę PdfPageTextContent na stronie.
  • render(destination: Bitmap, destClip: Rect?, transform: Matrix?, params: RenderParams) – renderuje stronę do bitmapy.
  • searchText(query: String) – wyszukuje na stronie podany ciąg znaków i zwraca granice wszystkich dopasowań.
  • selectContent(start: SelectionBoundary, stop: SelectionBoundary) – Zwraca PageSelection, który reprezentuje zawartość między 2 granicami.

Wykorzystanie interfejsu API

  • Interfejs PdfRenderer#write() API zapisuje wersję załadowanego pliku PDF w obiekcie ParcelFileDescriptor. Przykłady zastosowań:

    • Zapisywanie kopii dokumentu PDF po usunięciu zabezpieczenia hasłem
    • Zapisywanie zmian (adnotacji, wypełniania formularzy itp.)
  • Interfejsy PdfRenderer.Page#render() renderują stronę lub jej część do postaci mapy bitowej. W przypadku powiększenia interfejs API może też renderować część strony do mapy bitowej o określonym rozmiarze.

  • Interfejsy API PdfRenderer.PagegetImageContents(), getLinkContents()getTextContents() zwracają treści dostępne na stronie. Możesz używać treści do celów związanych z ułatwieniami dostępu i komunikatami TalkBack lub w funkcjach opartych na AI, takich jak generowanie podsumowania strony.

  • Interfejs API PdfRenderer.Page#selectContent wybiera treści dostępne na stronie. Wybrane treści możesz wykorzystać do takich działań jak:

    • Zadzwoń, jeśli numer telefonu
    • Mapy, jeśli wybrano adres.
    • Kopiuj
    • Udostępnij
    • Komentarze

Zgodność

Klasa PdfRendererPreV udostępnia interfejsy API Androida V w Androidzie w wersjach od R do U (poziomy interfejsu API 30–34).

Dodatkowe materiały

Więcej informacji o dodawaniu przeglądarki plików PDF do aplikacji znajdziesz w artykule Implementowanie przeglądarki plików PDF.