Skip to content
ComPDF
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)