Visualizador de PDF do Android

A biblioteca do visualizador de PDF do Jetpack, com suporte das APIs do framework, oferece uma solução pronta e de alta performance para aplicativos relacionados a documentos PDF no Android.

A biblioteca do visualizador de PDF (androidx.pdf) oferece uma interface do usuário incorporável que permite aos usuários fazer o seguinte:

  • Abrir e visualizar documentos PDF
  • Pesquisar e selecionar conteúdo
  • Zoom e rolagem
  • Salvar anotações no documento
  • Interagir com PDFs usando uma stylus

É possível criar uma experiência completa em PDF integrando as APIs da biblioteca Jetpack ou usando diretamente as APIs do framework.

Biblioteca PDF do Jetpack

A biblioteca PDF do Jetpack fornece a classe PdfViewerFragment que renderiza documentos PDF, incluindo PDFs paginados. Cada página é renderizada em uma visualização própria. O PdfViewerFragment mostra um botão de ação flutuante para compatibilidade com anotações e geralmente inclui um botão ou outro controle de interface que abre um menu de pesquisa.

Para saber como implementar o PdfViewerFragment, consulte Implementar um visualizador de PDF.

APIs do framework

A biblioteca Jetpack usa APIs de framework para analisar e carregar documentos PDF. O PdfRenderer fornece as APIs básicas de framework relacionadas à renderização de PDF.

Antes do Android V (nível 35 da API), as classes PdfRenderer e PdfRenderer.Page forneciam as APIs para processamento de PDF. As classes PdfRenderer e PdfRenderer.Page foram atualizadas no Android V com recursos avançados de PDF.

PdfRenderer

APIs anteriores ao Android V

  • getPageCount(): recebe o número de páginas no documento.
  • openPage(index: Int): abre uma página para renderização.
  • shouldScaleForPrinting(): indica se o documento precisa ser dimensionado para impressão. Considere essas informações se o documento for renderizado para impressão e o tamanho da mídia de destino for diferente do tamanho da página.

APIs adicionadas no Android V

  • PdfRenderer(fileDescriptor: ParcelFileDescriptor, params: LoadParams) — Cria uma nova instância. É possível carregar PDFs protegidos por senha.
  • getDocumentLinearizedType(): retorna o tipo linearizado de documento para PDFs com menos de 1 KB.
  • getPdfFormType(): retorna o tipo de formulário do PDF carregado.
  • write(destination: ParcelFileDescriptor, removePasswordProtection: Boolean): salva o estado do documento carregado no momento no descritor de arquivo gravável transmitido como um argumento.

PdfRenderer.Page

A classe PdfRenderer.Page representa uma página de documento PDF para renderização.

APIs anteriores ao Android V

  • RENDER_MODE_FOR_DISPLAY: modo para renderizar o conteúdo para exibição em uma tela.
  • RENDER_MODE_FOR_PRINT: modo para renderizar o conteúdo para impressão.
  • getIndex(): recebe o índice da página.
  • getWidth(): recebe a largura da página em pontos (1/72 de polegada).
  • getHeight(): recebe a altura da página em pontos (1/72 de polegada).
  • render(destination: Bitmap, destClip: Rect?, transform: Matrix?, renderMode: Int): renderiza uma página em um bitmap.

APIs adicionadas no Android V

  • applyEdit(editRecord: FormEditRecord): aplica um FormEditRecord ao PDF.
  • getFormWidgetInfos(): retorna informações sobre todos os widgets de formulário na página.
  • getFormWidgetInfos(types: IntArray): retorna informações sobre todos os widgets de formulário dos tipos especificados na página.
  • getFormWidgetInfoAtIndex(widgetIndex: Int): retorna informações sobre o widget identificado pelo argumento widgetIndex.
  • fun getFormWidgetInfoAtPosition(x: Int, y: Int): retorna informações sobre o widget no ponto especificado.
  • getGotoLinks(): recebe os favoritos e os links de navegação presentes na página de um documento PDF.
  • getImageContents(): retorna uma lista de PdfPageImageContent encontradas na página.
  • getLinkContents(): recebe os limites e URLs de todos os links na página.
  • getTextContents(): retorna uma lista de PdfPageTextContent na página.
  • render(destination: Bitmap, destClip: Rect?, transform: Matrix?, params: RenderParams): renderiza uma página em um bitmap.
  • searchText(query: String): pesquisa a string especificada na página e retorna os limites de todas as correspondências.
  • selectContent(start: SelectionBoundary, stop: SelectionBoundary): retorna um PageSelection que representa o conteúdo entre os dois limites.

Uso da API

  • A API PdfRenderer#write() grava uma versão do PDF carregado em um ParcelFileDescriptor. Os casos de uso incluem o seguinte:

    • Salvar uma cópia do documento PDF depois de remover a segurança da senha
    • Salvar edições (anotações, preenchimento de formulários etc.)
  • As APIs PdfRenderer.Page#render() renderizam uma página ou parte dela em um bitmap. Em caso de zoom, a API também pode ser usada para renderizar uma parte da página em um bitmap de um determinado tamanho.

  • As APIs PdfRenderer.Page getImageContents(), getLinkContents() e getTextContents() retornam o conteúdo disponível na página. Você pode usar o conteúdo para acessibilidade e anúncios do TalkBack ou em recursos com tecnologia de IA, como gerar um resumo da página.

  • A API PdfRenderer.Page#selectContent seleciona o conteúdo disponível em uma página. Você pode usar o conteúdo selecionado para ações como:

    • Ligar, se um número de telefone
    • Maps, se um endereço estiver selecionado
    • Copiar
    • Compartilhar
    • Comentários

Compatibilidade

A classe PdfRendererPreV expõe as APIs do Android V no Android R até U (níveis de API 30 a 34).

Outros recursos

Consulte Implementar um leitor de PDF para saber como adicionar um leitor de PDF ao seu app.