Lector de PDF para Android

La biblioteca del visor de PDF de Jetpack, respaldada por las APIs del framework, ofrece una solución lista para usar y de alto rendimiento para las aplicaciones relacionadas con documentos PDF en Android.

La biblioteca del visor de PDF (androidx.pdf) proporciona una IU del visor de PDF incorporable que permite a los usuarios realizar las siguientes acciones:

  • Abrir y ver documentos PDF
  • Cómo buscar y seleccionar contenido
  • Zoom y desplazamiento
  • Cómo guardar anotaciones de documentos
  • Cómo interactuar con archivos PDF usando una pluma stylus

Puedes crear una experiencia en PDF con todas las funciones integrando las APIs de la biblioteca de Jetpack o usando las APIs del framework directamente.

Biblioteca de Jetpack PDF

La biblioteca de PDF de Jetpack proporciona la clase PdfViewerFragment, que renderiza documentos PDF, incluidos los PDF paginados. Cada página se renderiza en su propia vista. PdfViewerFragment muestra un botón de acción flotante para la compatibilidad con anotaciones y, por lo general, incluye un botón o algún otro control de IU que abre un menú de búsqueda.

Para obtener información sobre cómo implementar PdfViewerFragment, consulta Implementa un visor de PDF.

APIs de Framework

La biblioteca de Jetpack usa APIs de framework para analizar y cargar documentos PDF. PdfRenderer proporciona las APIs de framework básicas relacionadas con la renderización de PDF.

Antes de Android V (nivel de API 35), las clases PdfRenderer y PdfRenderer.Page proporcionaban las APIs para el procesamiento de PDF. Las clases PdfRenderer y PdfRenderer.Page se actualizaron en Android V con capacidades avanzadas de PDF.

PdfRenderer

APIs anteriores a Android V

  • getPageCount(): Obtiene la cantidad de páginas del documento.
  • openPage(index: Int): Abre una página para la renderización.
  • shouldScaleForPrinting(): Obtiene si el documento se debe ajustar para la impresión. Ten en cuenta esta información si el documento se renderiza para imprimir y el tamaño del medio de destino difiere del tamaño de la página.

APIs agregadas en Android V

  • PdfRenderer(fileDescriptor: ParcelFileDescriptor, params: LoadParams) — Construye una instancia nueva. Se admite la carga de archivos PDF protegidos con contraseña.
  • getDocumentLinearizedType(): Muestra el tipo linealizado de documento para los archivos PDF que tienen menos de 1 KB.
  • getPdfFormType(): Devuelve el tipo de formulario del PDF cargado.
  • write(destination: ParcelFileDescriptor, removePasswordProtection: Boolean): Guarda el estado del documento cargado actualmente en el descriptor de archivo grabable que se pasó como argumento.

PdfRenderer.Page

La clase PdfRenderer.Page representa una página de documento PDF para la renderización.

APIs anteriores a Android V

  • RENDER_MODE_FOR_DISPLAY: Es el modo para renderizar el contenido y mostrarlo en una pantalla.
  • RENDER_MODE_FOR_PRINT: Es el modo para renderizar el contenido para la impresión.
  • getIndex(): Obtiene el índice de la página.
  • getWidth(): Obtiene el ancho de la página en puntos (1/72 de pulgada).
  • getHeight(): Obtiene la altura de la página en puntos (1/72 de pulgada).
  • render(destination: Bitmap, destClip: Rect?, transform: Matrix?, renderMode: Int): Renderiza una página en un mapa de bits.

APIs agregadas en Android V

  • applyEdit(editRecord: FormEditRecord): Aplica un FormEditRecord al PDF.
  • getFormWidgetInfos(): Muestra información sobre todos los widgets de formulario de la página.
  • getFormWidgetInfos(types: IntArray): Muestra información sobre todos los widgets de formulario de los tipos especificados en la página.
  • getFormWidgetInfoAtIndex(widgetIndex: Int): Muestra información sobre el widget identificado por el argumento widgetIndex.
  • fun getFormWidgetInfoAtPosition(x: Int, y: Int): Muestra información sobre el widget en el punto determinado.
  • getGotoLinks(): Obtiene los marcadores y los vínculos de ir a presentes en la página de un documento PDF.
  • getImageContents(): Muestra una lista de PdfPageImageContent que se encuentran en la página.
  • getLinkContents(): Obtiene los límites y las URLs de todos los vínculos de la página.
  • getTextContents(): Muestra una lista de PdfPageTextContent en la página.
  • render(destination: Bitmap, destClip: Rect?, transform: Matrix?, params: RenderParams): Renderiza una página en un mapa de bits.
  • searchText(query: String): Busca la cadena determinada en la página y devuelve los límites de todas las coincidencias.
  • selectContent(start: SelectionBoundary, stop: SelectionBoundary): Muestra un objeto PageSelection que representa el contenido entre los dos límites.

Uso de la API

  • La API de PdfRenderer#write() escribe una versión del PDF cargado en un ParcelFileDescriptor. Entre los casos de uso, se incluyen los siguientes:

    • Guardar una copia del documento PDF después de quitar la seguridad de la contraseña
    • Guardar ediciones (anotaciones, completar formularios, etc.)
  • Las APIs de PdfRenderer.Page#render() renderizan una página o una parte de una página en un mapa de bits. En el caso del zoom, la API también se puede usar para renderizar una parte de la página en un mapa de bits de un tamaño determinado.

  • Las APIs de PdfRenderer.Page getImageContents(), getLinkContents() y getTextContents() devuelven el contenido disponible en la página. Puedes usar el contenido para anuncios de accesibilidad y TalkBack, o en funciones potenciadas por IA, como la generación de un resumen de la página.

  • La API de PdfRenderer.Page#selectContent selecciona el contenido disponible en una página. Puedes usar el contenido seleccionado para acciones como las siguientes:

    • Llamar, si es un número de teléfono
    • Maps, si se selecciona una dirección
    • Copiar
    • Compartir
    • Comentarios

Compatibilidad

La clase PdfRendererPreV expone las APIs de Android V en Android R a U (niveles de API del 30 al 34).

Recursos adicionales

Consulta Implementa un lector de PDF para obtener información sobre cómo agregar un lector de PDF a tu app.