Android PDF 뷰어

프레임워크 API로 지원되는 Jetpack PDF 뷰어 라이브러리는 Android에서 PDF 문서 관련 애플리케이션을 위한 즉시 사용 가능한 고성능 솔루션을 제공합니다.

PDF 뷰어 라이브러리 (androidx.pdf)는 사용자가 다음 작업을 할 수 있는 삽입 가능한 PDF 뷰어 UI를 제공합니다.

  • PDF 문서 열기 및 보기
  • 콘텐츠 검색 및 선택
  • 확대/축소 및 스크롤
  • 문서 주석 저장
  • 스타일러스를 사용하여 PDF와 상호작용하기

Jetpack 라이브러리 API를 통합하거나 프레임워크 API를 직접 사용하여 모든 기능을 갖춘 PDF 환경을 만들 수 있습니다.

Jetpack PDF 라이브러리

Jetpack PDF 라이브러리는 페이지로 구분된 PDF를 비롯한 PDF 문서를 렌더링하는 PdfViewerFragment 클래스를 제공합니다. 각 페이지는 자체 뷰에서 렌더링됩니다. PdfViewerFragment에는 주석 지원을 위한 플로팅 작업 버튼이 표시되며 일반적으로 검색 메뉴를 여는 버튼이나 기타 UI 컨트롤이 포함됩니다.

PdfViewerFragment를 구현하는 방법을 알아보려면 PDF 뷰어 구현을 참고하세요.

프레임워크 API

Jetpack 라이브러리는 프레임워크 API를 사용하여 PDF 문서를 파싱하고 로드합니다. PdfRenderer는 PDF 렌더링과 관련된 기본 프레임워크 API를 제공합니다.

Android V (API 수준 35) 이전에는 PdfRendererPdfRenderer.Page 클래스가 PDF 처리용 API를 제공했습니다. PdfRendererPdfRenderer.Page 클래스가 고급 PDF 기능을 사용하여 Android V에서 업데이트되었습니다.

PdfRenderer

Android V 이전 API

  • getPageCount() - 문서의 페이지 수를 가져옵니다.
  • openPage(index: Int) - 렌더링을 위한 페이지를 엽니다.
  • shouldScaleForPrinting() - 인쇄를 위해 문서의 크기를 조정해야 하는지 여부를 가져옵니다. 문서가 인쇄용으로 렌더링되고 타겟 미디어 크기가 페이지 크기와 다른 경우 이 정보를 고려하세요.

Android V에 추가된 API

  • PdfRenderer(fileDescriptor: ParcelFileDescriptor, params: LoadParams) — 새 인스턴스를 생성합니다. 비밀번호로 보호된 PDF 로드를 지원합니다.
  • getDocumentLinearizedType() - 1KB 미만의 PDF에 대해 선형화된 문서 유형을 반환합니다.
  • getPdfFormType() - 로드된 PDF의 양식 유형을 반환합니다.
  • write(destination: ParcelFileDescriptor, removePasswordProtection: Boolean) - 현재 로드된 문서의 상태를 인수로 전달된 쓰기 가능한 파일 설명자에 저장합니다.

PdfRenderer.Page

PdfRenderer.Page 클래스는 렌더링을 위한 PDF 문서 페이지를 나타냅니다.

Android V 이전 API

  • RENDER_MODE_FOR_DISPLAY - 화면에 표시할 콘텐츠를 렌더링하는 모드입니다.
  • RENDER_MODE_FOR_PRINT - 인쇄를 위해 콘텐츠를 렌더링하는 모드입니다.
  • getIndex() - 페이지 색인을 가져옵니다.
  • getWidth() - 페이지 너비를 포인트 (1/72인치)로 가져옵니다.
  • getHeight() - 페이지 높이를 포인트 (1/72인치)로 가져옵니다.
  • render(destination: Bitmap, destClip: Rect?, transform: Matrix?, renderMode: Int) - 페이지를 비트맵으로 렌더링합니다.

Android V에 추가된 API

  • applyEdit(editRecord: FormEditRecord) - PDF에 FormEditRecord를 적용합니다.
  • getFormWidgetInfos() - 페이지의 모든 양식 위젯에 관한 정보를 반환합니다.
  • getFormWidgetInfos(types: IntArray) - 페이지에 있는 지정된 유형의 모든 양식 위젯에 관한 정보를 반환합니다.
  • getFormWidgetInfoAtIndex(widgetIndex: Int) - widgetIndex 인수로 식별되는 위젯에 관한 정보를 반환합니다.
  • fun getFormWidgetInfoAtPosition(x: Int, y: Int) - 지정된 시점의 위젯에 관한 정보를 반환합니다.
  • getGotoLinks() - PDF 문서의 페이지에 있는 북마크와 goto 링크를 가져옵니다.
  • getImageContents() - 페이지에서 찾은 PdfPageImageContent 목록을 반환합니다.
  • getLinkContents() - 페이지에 있는 모든 링크의 경계와 URL을 가져옵니다.
  • getTextContents() — 페이지의 PdfPageTextContent 목록을 반환합니다.
  • render(destination: Bitmap, destClip: Rect?, transform: Matrix?, params: RenderParams) - 페이지를 비트맵으로 렌더링합니다.
  • searchText(query: String) - 페이지에서 지정된 문자열을 검색하고 모든 일치 항목의 경계를 반환합니다.
  • selectContent(start: SelectionBoundary, stop: SelectionBoundary) - 두 경계 사이의 콘텐츠를 나타내는 PageSelection를 반환합니다.

API 사용

  • PdfRenderer#write() API는 로드된 PDF 버전을 ParcelFileDescriptor에 씁니다. 사용 사례는 다음과 같습니다.

    • 비밀번호 보안을 삭제한 후 PDF 문서의 사본을 저장합니다.
    • 수정사항 저장 (주석, 양식 작성 등)
  • PdfRenderer.Page#render() API는 페이지 또는 페이지의 일부를 비트맵으로 렌더링합니다. 확대의 경우 API를 사용하여 페이지의 일부를 지정된 크기의 비트맵으로 렌더링할 수도 있습니다.

  • PdfRenderer.Page API getImageContents(), getLinkContents(), getTextContents()는 페이지에서 사용할 수 있는 콘텐츠를 반환합니다. 접근성 및 TalkBack 알림을 위해 또는 페이지 요약 생성과 같은 AI 지원 기능에서 콘텐츠를 사용할 수 있습니다.

  • PdfRenderer.Page#selectContent API는 페이지에서 사용할 수 있는 콘텐츠를 선택합니다. 선택한 콘텐츠를 사용하여 다음과 같은 작업을 할 수 있습니다.

    • 전화번호가 있는 경우 전화
    • 주소가 선택된 경우 지도
    • 복사
    • 공유
    • 비고

호환성

PdfRendererPreV 클래스는 Android R~U (API 수준 30~34)에서 Android V API를 노출합니다.

추가 리소스

앱에 PDF 뷰어를 추가하는 방법을 알아보려면 PDF 뷰어 구현을 참고하세요.