From 9b5cd5e014579b68ef654dcc55a8e7b6b1817fde Mon Sep 17 00:00:00 2001 From: ocean <503259349@qq.com> Date: Wed, 3 Sep 2025 12:18:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0pdf=E7=9A=84=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E9=A1=B5=E5=9B=BE=E7=89=87=E8=B5=84=E6=BA=90=EF=BC=8C?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E5=88=B0app=E7=9B=AE=E5=BD=95=E4=B8=AD?= =?UTF-8?q?=EF=BC=8C=E4=BF=9D=E5=AD=98=E8=B7=AF=E5=BE=84=E5=88=B0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../all/pdfreader/pro/app/util/PdfScanner.kt | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/app/src/main/java/com/all/pdfreader/pro/app/util/PdfScanner.kt b/app/src/main/java/com/all/pdfreader/pro/app/util/PdfScanner.kt index 1e2c570..d99a4c4 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/util/PdfScanner.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/util/PdfScanner.kt @@ -1,12 +1,18 @@ package com.all.pdfreader.pro.app.util import android.content.Context +import android.graphics.Bitmap +import android.graphics.pdf.PdfRenderer +import android.os.ParcelFileDescriptor import android.util.Log import com.all.pdfreader.pro.app.room.entity.PdfDocumentEntity import com.all.pdfreader.pro.app.room.repository.PdfRepository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import java.io.File +import java.io.FileOutputStream import java.util.concurrent.TimeUnit +import androidx.core.graphics.createBitmap class PdfScanner( private val context: Context, @@ -55,6 +61,8 @@ class PdfScanner( if (existingDoc == null) { LogUtil.logDebug("ocean", "PdfScanner: 🆕 发现新PDF文件: ${file.name}") + val thumbnailPath = generateThumbnail(context, file) + val metadata = PdfMetadataExtractor.extractMetadata(file.absolutePath) val document = PdfDocumentEntity( @@ -64,6 +72,7 @@ class PdfScanner( fileSize = file.length(), lastModified = file.lastModified(), pageCount = metadata?.pageCount ?: 0, + thumbnailPath = thumbnailPath, metadataTitle = metadata?.title, metadataAuthor = metadata?.author, metadataSubject = metadata?.subject, @@ -124,4 +133,41 @@ class PdfScanner( val lastScan = getLastScanTime() return TimeUnit.MILLISECONDS.toHours(System.currentTimeMillis() - lastScan) } + + + private fun generateThumbnail(context: Context, pdfFile: File): String? { + return try { + val fileDescriptor = ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY) + val pdfRenderer = PdfRenderer(fileDescriptor) + + if (pdfRenderer.pageCount > 0) { + val page = pdfRenderer.openPage(0) + val bitmap = createBitmap(page.width, page.height) + page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY) + page.close() + + // 保存到缓存目录 + val cacheDir = File(context.cacheDir, "thumbnails") + if (!cacheDir.exists()) cacheDir.mkdirs() + val thumbFile = File(cacheDir, pdfFile.nameWithoutExtension + ".jpg") + + FileOutputStream(thumbFile).use { out -> + bitmap.compress(Bitmap.CompressFormat.JPEG, 80, out) + } + + pdfRenderer.close() + fileDescriptor.close() + + thumbFile.absolutePath + } else { + pdfRenderer.close() + fileDescriptor.close() + null + } + } catch (e: Exception) { + e.printStackTrace() + null + } + } + } \ No newline at end of file