Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드 WebView에서 PDF 파일 표시하는 방법 (단계별 완벽 가이드)

안드로이드 앱을 개발하다 보면 WebView 안에서 PDF 파일을 직접 보여줘야 하는 경우가 자주 발생합니다. 하지만 안드로이드의 WebView는 기본적으로 PDF 렌더링을 지원하지 않기 때문에, 별도의 처리 과정이 필요합니다.

이 글에서는 Google Docs 뷰어를 활용해 안드로이드 WebView에서 PDF를 간단하게 표시하는 방법을 단계별로 소개합니다.

1단계: 새 프로젝트 생성하기

Android Studio를 실행하고 File → New Project 메뉴로 이동한 뒤, 새 프로젝트를 생성하세요. 이때 프로젝트 이름, 패키지명, 최소 SDK 버전 등 필요한 모든 정보를 입력합니다.

2단계: 레이아웃 파일(activity_main.xml) 작성하기

PDF를 화면에 표시할 WebView를 배치하기 위해 res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
   xmlns:app = "https://schemas.android.com/apk/res-auto"
   xmlns:tools = "https://schemas.android.com/tools"
   android:layout_width = "match_parent"
   android:gravity = "center"
   android:layout_height = "match_parent"
   tools:context = ".MainActivity"
   android:orientation = "vertical">
   <WebView
      android:id = "@+id/web_view"
      android:layout_width = "match_parent"
      android:layout_height = "match_parent" />
</LinearLayout>

위 코드에서는 화면 전체를 채우는 하나의 WebView를 선언했습니다. 이 WebView가 PDF 문서를 렌더링하는 역할을 담당합니다.

3단계: MainActivity.java 구현하기

이제 src/MainActivity.java 파일에 아래 코드를 추가합니다. 핵심은 PDF URL을 Google Docs 뷰어 URL로 감싸서 로드하는 것입니다.

package com.example.myapplication;
import android.app.ProgressDialog;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
    @RequiresApi(api = Build.VERSION_CODES.P)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Loading Data...");
        progressDialog.setCancelable(false);
        WebView web_view = findViewById(R.id.web_view);
        web_view.requestFocus();
        web_view.getSettings().setJavaScriptEnabled(true);
        String myPdfUrl = "gymnasium-wandlitz.de/vplan/vplan.pdf";
        String url = "https://docs.google.com/viewer?embedded=true&url="+myPdfUrl;
        web_view.loadUrl(url);
        web_view.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        web_view.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                if (progress < 100) {
                    progressDialog.show();
                }
                if (progress == 100) {
                    progressDialog.dismiss();
                }
            }
        });
    }
}

코드 주요 포인트

  • JavaScript 활성화: setJavaScriptEnabled(true)를 호출해야 Google Docs 뷰어가 정상적으로 동작합니다.
  • Google Docs 뷰어 URL: https://docs.google.com/viewer?embedded=true&url=PDF주소 형식으로 URL을 구성하면 WebView에서 PDF를 볼 수 있습니다.
  • ProgressDialog: onProgressChanged() 콜백을 통해 로딩 진행률을 감지하고, 로딩 중에는 진행 다이얼로그를 표시하고 완료되면 자동으로 닫습니다.
  • URL 리다이렉션 처리: shouldOverrideUrlLoading()을 오버라이드하여 페이지 이동이 WebView 내부에서 계속 이루어지도록 설정했습니다.

4단계: AndroidManifest.xml에 인터넷 권한 추가하기

온라인상의 PDF 파일을 불러오려면 인터넷 권한이 반드시 필요합니다. AndroidManifest.xml 파일에 아래와 같이 권한을 추가하세요.

<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android = "https://schemas.android.com/apk/res/android"
    package = "com.example.myapplication">
    <uses-permission android:name = "android.permission.INTERNET"/>
    <application
        android:allowBackup = "true"
        android:icon = "@mipmap/ic_launcher"
        android:label = "@string/app_name"
        android:roundIcon = "@mipmap/ic_launcher_round"
        android:supportsRtl = "true"
        android:theme = "@style/AppTheme">
        <activity android:name = ".MainActivity">
            <intent-filter>
                <action android:name = "android.intent.action.MAIN" />
                <category android:name = "android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

앱 실행 및 결과 확인

모든 설정이 끝났다면 애플리케이션을 실행해 봅시다. 실제 안드로이드 스마트폰을 컴퓨터에 연결한 상태에서, Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run(실행) 아이콘을 클릭합니다. 실행 기기 목록에서 연결된 모바일 기기를 선택하면, 해당 기본 화면에 아래와 같이 PDF가 정상적으로 표시되는 것을 확인할 수 있습니다.

안드로이드 WebView에서 PDF 파일 표시하는 방법 (단계별 완벽 가이드)

마무리 및 참고 사항

이처럼 Google Docs 뷰어를 활용하면 별도의 PDF 라이브러리 없이도 WebView에서 손쉽게 PDF를 표시할 수 있습니다. 다만 이 방식은 인터넷 연결이 필수이며, 오프라인 환경이나 더 세밀한 커스터마이징이 필요하다면 PdfRenderer API나 서드파티 라이브러리 사용을 고려하는 것이 좋습니다.