Guides
PDF 页面转图片
您可以通过代码将指定页码渲染为 Bitmap,用于保存或显示在 ImageView 中。以下示例展示了如何获取文档第一页的缩略图。
java
// 使用子线程渲染 PDF 页为 Bitmap
new Thread(() -> {
// 1. 获取文档的第一页
CPDFPage cpdfPage = document.pageAtIndex(0);
// 2. 获取页面尺寸
RectF pageSize = cpdfPage.getSize();
int pageWidth = (int) pageSize.width();
int pageHeight = (int) pageSize.height(); // 注意:原代码 height 错写成 width,这里修正
// 3. 设置渲染区域参数(可调整以渲染局部区域)
int patchX = 0; // 渲染起点 X 坐标
int patchY = 0; // 渲染起点 Y 坐标
int patchW = pageWidth; // 渲染区域宽度
int patchH = pageHeight; // 渲染区域高度
// 4. 设置渲染参数
int bgColor = 0xFFFFFFFF; // 背景色白色
boolean isDrawAnnot = true; // 是否渲染注释
boolean isDrawForm = true; // 是否渲染表单内容
// 5. 创建目标 Bitmap
Bitmap bitmap = Bitmap.createBitmap(patchW, patchH, Bitmap.Config.RGB_565);
// 6. 计算缩放比例(目标宽度 / 页面宽度)
float scale = (float) pageWidth / pageSize.width();
// 7. 渲染 PDF 页面到 Bitmap
boolean renderResult = cpdfPage.renderPage(
bitmap, // 渲染目标 Bitmap
scale, // 缩放比例
pageWidth, // 输出宽度
pageHeight,// 输出高度
patchX, // 渲染区域 X 起点
patchY, // 渲染区域 Y 起点
patchW, // 渲染区域宽度
patchH, // 渲染区域高度
bgColor, // 背景色
255, // 渲染透明度
0, // 渲染旋转角度
isDrawAnnot,// 是否绘制注释
isDrawForm // 是否绘制表单
);
// 8. 在主线程更新 UI
runOnUiThread(() -> {
if (renderResult && bitmap != null) {
// 显示渲染后的 Bitmap
ivImage.setImageBitmap(bitmap);
}
});
}).start();kotlin
// 使用子线程渲染 PDF 页面为 Bitmap
Thread {
// 1. 获取文档的第一页
val cpdfPage: CPDFPage = document.pageAtIndex(0)
// 2. 获取页面尺寸
val pageSize: RectF = cpdfPage.size
val pageWidth: Int = pageSize.width().toInt()
val pageHeight: Int = pageSize.height().toInt() // 注意:原代码错误使用 width,这里已修正
// 3. 设置渲染区域参数(可调整以渲染局部区域)
val patchX = 0 // 渲染起点 X 坐标
val patchY = 0 // 渲染起点 Y 坐标
val patchW = pageWidth // 渲染区域宽度
val patchH = pageHeight // 渲染区域高度
// 4. 设置渲染参数
val bgColor = 0xFFFFFFFF.toInt() // 背景色白色
val isDrawAnnot = true // 是否渲染注释
val isDrawForm = true // 是否渲染表单内容
// 5. 创建目标 Bitmap
val bitmap = Bitmap.createBitmap(patchW, patchH, Bitmap.Config.RGB_565)
// 6. 计算缩放比例(目标宽度 / 页面宽度)
val scale = pageWidth.toFloat() / pageSize.width()
// 7. 渲染 PDF 页面到 Bitmap
val renderResult = cpdfPage.renderPage(
bitmap, // 渲染目标 Bitmap
scale, // 缩放比例
pageWidth, // 输出宽度
pageHeight, // 输出高度
patchX, // 渲染区域 X 起点
patchY, // 渲染区域 Y 起点
patchW, // 渲染区域宽度
patchH, // 渲染区域高度
bgColor, // 背景色
255, // 渲染透明度
0, // 渲染旋转角度
isDrawAnnot, // 是否绘制注释
isDrawForm // 是否绘制表单
)
// 8. 在主线程更新 UI
runOnUiThread {
if (renderResult) {
// 显示渲染后的 Bitmap
ivImage.setImageBitmap(bitmap)
}
}
}.start()如果集成使用了ComPDFKit_Tools模块 我们还提供了通过Glide库渲染PDF缩略图
java
// ================================
// 使用 Glide 渲染 PDF 页示例
// ================================
// 1. 使用 CPDFDocument 和指定页码渲染
Glide.with(this)
.asBitmap() // 以 Bitmap 形式加载
.load(CPDFWrapper.fromDocument(document, pageIndex)) // 从已加载的 CPDFDocument 获取指定页
.diskCacheStrategy(DiskCacheStrategy.NONE) // 不使用磁盘缓存
.skipMemoryCache(true) // 不使用内存缓存
.fitCenter() // 按比例缩放,使内容居中显示
.into(ivImage); // 渲染到 ImageView
// 2. 根据 PDF 文件路径渲染第一页
Glide.with(this)
.asBitmap()
.load(CPDFWrapper.fromFile("filePath")) // 从文件路径加载 PDF
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.into(ivImage);
// 3. 根据 Uri 渲染第一页
Glide.with(this)
.asBitmap()
.load(CPDFWrapper.fromUri(uri)) // 从 Uri 加载 PDF
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.into(ivImage);
// 4. 自定义 CPDFDocumentPageWrapper 渲染(可设置注释、表单、背景色、尺寸)
CPDFDocumentPageWrapper pageWrapper = new CPDFDocumentPageWrapper(document, pageIndex);
pageWrapper.setDrawAnnotation(true); // 是否渲染注释
pageWrapper.setDrawForms(true); // 是否渲染表单
pageWrapper.setBackgroundColor(0xFFFFFFFF); // 设置背景色(白色)
// 创建 CPDFWrapper 对象,用于 Glide 加载
CPDFWrapper wrapper = new CPDFWrapper(pageWrapper);
Glide.with(this)
.load(wrapper)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.override((int) renderImageWidth, (int) renderImageHeight) // 指定输出 Bitmap 尺寸
.into(ivImage);kotlin
// ================================
// 使用 Glide 渲染 PDF 页面示例
// ================================
// 1. 使用 CPDFDocument 和指定页码渲染
Glide.with(this)
.asBitmap() // 以 Bitmap 形式加载
.load(CPDFWrapper.fromDocument(document, pageIndex)) // 从已加载的 CPDFDocument 获取指定页
.diskCacheStrategy(DiskCacheStrategy.NONE) // 不使用磁盘缓存
.skipMemoryCache(true) // 不使用内存缓存
.fitCenter() // 按比例缩放,使内容居中显示
.into(ivImage) // 渲染到 ImageView
// 2. 根据 PDF 文件路径渲染第一页
Glide.with(this)
.asBitmap()
.load(CPDFWrapper.fromFile("filePath")) // 从文件路径加载 PDF
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.into(ivImage)
// 3. 根据 Uri 渲染第一页
Glide.with(this)
.asBitmap()
.load(CPDFWrapper.fromUri(uri)) // 从 Uri 加载 PDF
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.fitCenter()
.into(ivImage)
// 4. 自定义 CPDFDocumentPageWrapper 渲染(可设置注释、表单、背景色、尺寸)
val pageWrapper = CPDFDocumentPageWrapper(document, pageIndex).apply {
drawAnnotation = true // 是否渲染注释
drawForms = true // 是否渲染表单
backgroundColor = 0xFFFFFFFF.toInt() // 设置背景色(白色)
}
// 创建 CPDFWrapper 对象,用于 Glide 加载
val wrapper = CPDFWrapper(pageWrapper)
Glide.with(this)
.load(wrapper)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.override(renderImageWidth.toInt(), renderImageHeight.toInt()) // 指定输出 Bitmap 尺寸
.into(ivImage)