PdfRenderActivity.java

public class PdfRenderActivity extends AppCompatActivity {
 
    ViewPager2 mViewPager;
    PdfRenderAdapter mAdapter;
    List<Bitmap> mPageBitmaps = new ArrayList<>();
 
    PdfRenderer mRenderer;
    ParcelFileDescriptor mDescriptor;
 
 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pdfrender);
        mViewPager = findViewById(R.id.viewPager);
 
 
        try {
            // Assets 폴더의 .pdf 파일 -> File 객체로 복사
            InputStream is = getAssets().open("SampleTest.pdf");
            File outFile = new File(getFilesDir(), "SampleTest.pdf");
            OutputStream os = new FileOutputStream(outFile);
 
            byte[] buffer = new byte[1024*1024];
            int length;
            while( (length = is.read(buffer)) > 0 ) {
                os.write(buffer, 0length);
            }
            os.flush();
            os.close();
            is.close();
 
 
            // PDF 파일을 Bitmap 으로 변환하여 뷰페이저로 보기
            // 파일을 읽기 모드로 open
            mDescriptor = ParcelFileDescriptor.open(outFile, ParcelFileDescriptor.MODE_READ_ONLY);
            // PdfRender 객체와 pdf 파일을 연결
            mRenderer = new PdfRenderer(mDescriptor);
 
            // 페이지수만큼 반복
            for ( int i = 0; i < mRenderer.getPageCount(); i++ ) {
                // 페이지 열기
                PdfRenderer.Page page = mRenderer.openPage(i);
                // pdf 페이지를 bitmap 으로 변환하여 사용자에게 보여주기
                Bitmap bitmap = Bitmap.createBitmap(page.getWidth(), page.getHeight(), Bitmap.Config.ARGB_8888);
                page.render(bitmap, nullnull, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
 
                this.mPageBitmaps.add(bitmap);
                page.close();
            }
 
            // 뷰페이저로 보여주기
            mAdapter = new PdfRenderAdapter(this.mPageBitmaps);
            mViewPager.setAdapter(this.mAdapter);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    @Override
    protected void onDestroy() {
        // 리소스 닫기
        try {
            if(mDescriptor != null) {
                mDescriptor.close();
            }
            if(mRenderer != null) {
                mRenderer.close();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
 
        super.onDestroy();
    }
}
cs

 

 

PdfRenderAdapter.java

public class PdfRenderAdapter extends RecyclerView.Adapter<PdfRenderAdapter.PdfRenderHolder> {
 
    private List<Bitmap> bitmaps;
 
    public PdfRenderAdapter(List<Bitmap> bitmaps) {
        this.bitmaps = bitmaps;
    }
 
 
    @NonNull
    @Override
    public PdfRenderHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_pdfrender, parent, false);
        return new PdfRenderHolder(view);
    }
 
    @Override
    public void onBindViewHolder(@NonNull PdfRenderHolder holder, int position) {
        holder.imageView.setImageBitmap(this.bitmaps.get(position));
    }
 
    @Override
    public int getItemCount() {
        return bitmaps.size();
    }
 
    static class PdfRenderHolder extends RecyclerView.ViewHolder {
        ImageView imageView;
 
        public PdfRenderHolder(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.imageView);
        }
    }
}
 
cs

 

 

activity_pdfrender.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/viewPager"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 
</LinearLayout>
cs

 

 

item_pdfrender.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <ImageView
        android:id="@+id/imageView"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 
</LinearLayout>
cs

 

 

build.gradle.kts

    implementation ("androidx.viewpager2:viewpager2:1.1.0")
cs

 

 

결과

+ Recent posts