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, 0, length);
}
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, null, null, 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 |
결과
'IT > Ⅱ. Android' 카테고리의 다른 글
[Android] GIF, SVG, APNG 이미지 사용 (2) | 2025.05.21 |
---|---|
[Android] 이미지로 프로그레스바 만들기 (1) | 2025.05.16 |
[Android] PDF 문서 보기 - WebView 사용 (0) | 2025.05.13 |
[Android] PDF 문서 보기 - 라이브러리 사용 (0) | 2025.05.10 |