Guides
PDF Page to Image
You can render a specific PDF page to a Bitmap for saving or displaying in an ImageView. The following examples show how to generate a thumbnail of the first page.
java
// Render PDF Page in a Background Thread
new Thread(() -> {
// 1. Get the first page
CPDFPage cpdfPage = document.pageAtIndex(0);
// 2. Get page size
RectF pageSize = cpdfPage.getSize();
int pageWidth = (int) pageSize.width();
int pageHeight = (int) pageSize.height();
// 3. Render region (adjust to render partial page)
int patchX = 0, patchY = 0, patchW = pageWidth, patchH = pageHeight;
// 4. Render settings
int bgColor = 0xFFFFFFFF; // White background
boolean isDrawAnnot = true; // Draw annotations
boolean isDrawForm = true; // Draw form fields
// 5. Create target Bitmap
Bitmap bitmap = Bitmap.createBitmap(patchW, patchH, Bitmap.Config.RGB_565);
// 6. Calculate scale (target width / page width)
float scale = (float) pageWidth / pageSize.width();
// 7. Render PDF page to Bitmap
boolean renderResult = cpdfPage.renderPage(
bitmap,
scale,
pageWidth,
pageHeight,
patchX,
patchY,
patchW,
patchH,
bgColor,
255,
0,
isDrawAnnot,
isDrawForm
);
// 8. Update UI on main thread
runOnUiThread(() -> {
if (renderResult && bitmap != null) {
ivImage.setImageBitmap(bitmap);
}
});
}).start();kotlin
Thread {
val cpdfPage = document.pageAtIndex(0)
val pageSize = cpdfPage.size
val pageWidth = pageSize.width().toInt()
val pageHeight = pageSize.height().toInt()
val patchX = 0
val patchY = 0
val patchW = pageWidth
val patchH = pageHeight
val bgColor = 0xFFFFFFFF.toInt()
val isDrawAnnot = true
val isDrawForm = true
val bitmap = Bitmap.createBitmap(patchW, patchH, Bitmap.Config.RGB_565)
val scale = pageWidth.toFloat() / pageSize.width()
val renderResult = cpdfPage.renderPage(
bitmap,
scale,
pageWidth,
pageHeight,
patchX,
patchY,
patchW,
patchH,
bgColor,
255,
0,
isDrawAnnot,
isDrawForm
)
runOnUiThread {
if (renderResult) {
ivImage.setImageBitmap(bitmap)
}
}
}.start()Render PDF Page Using Glide (ComPDFKit_Tools Module)
If you integrate ComPDFKit_Tools, you can render PDF thumbnails using Glide.
java
// 1. Render from CPDFDocument and page index
Glide.with(this)
.asBitmap()
.load(CPDFWrapper.fromDocument(document, pageIndex))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.into(ivImage);
// 2. Render from PDF file path
Glide.with(this)
.asBitmap()
.load(CPDFWrapper.fromFile("filePath"))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.into(ivImage);
// 3. Render from Uri
Glide.with(this)
.asBitmap()
.load(CPDFWrapper.fromUri(uri))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.into(ivImage);
// 4. Custom CPDFDocumentPageWrapper with annotations, forms, background color
CPDFDocumentPageWrapper pageWrapper = new CPDFDocumentPageWrapper(document, pageIndex);
pageWrapper.setDrawAnnotation(true);
pageWrapper.setDrawForms(true);
pageWrapper.setBackgroundColor(0xFFFFFFFF);
CPDFWrapper wrapper = new CPDFWrapper(pageWrapper);
Glide.with(this)
.load(wrapper)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.override((int) renderImageWidth, (int) renderImageHeight)
.into(ivImage);kotlin
// 1. Render from CPDFDocument and page index
Glide.with(this)
.asBitmap()
.load(CPDFWrapper.fromDocument(document, pageIndex))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.into(ivImage)
// 2. Render from PDF file path
Glide.with(this)
.asBitmap()
.load(CPDFWrapper.fromFile("filePath"))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.into(ivImage)
// 3. Render from Uri
Glide.with(this)
.asBitmap()
.load(CPDFWrapper.fromUri(uri))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.into(ivImage)
// 4. Custom CPDFDocumentPageWrapper with annotations, forms, background
val pageWrapper = CPDFDocumentPageWrapper(document, pageIndex).apply {
drawAnnotation = true
drawForms = true
backgroundColor = 0xFFFFFFFF.toInt()
}
val wrapper = CPDFWrapper(pageWrapper)
Glide.with(this)
.load(wrapper)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.override(renderImageWidth.toInt(), renderImageHeight.toInt())
.into(ivImage)