From 576f9405312b07535998be78da3721540edb3137 Mon Sep 17 00:00:00 2001 From: cwchen <1048842385@qq.com> Date: Mon, 10 Nov 2025 11:17:29 +0800 Subject: [PATCH] =?UTF-8?q?pdf=20=E9=A2=84=E8=A7=88=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/common/DocumentSearch.vue | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/views/common/DocumentSearch.vue b/src/views/common/DocumentSearch.vue index c07b6c3..4af1afe 100644 --- a/src/views/common/DocumentSearch.vue +++ b/src/views/common/DocumentSearch.vue @@ -157,7 +157,6 @@ export default { async renderAllPages() { if (!this.pdfDoc) return - console.log('解析的pdf总数:', this.pdfDoc.numPages) const container = this.$refs.pdfWrapper if (!container) return container.innerHTML = '' @@ -204,7 +203,7 @@ export default { const canvas = document.createElement('canvas') canvas.className = 'pdf-canvas' const deviceScale = window.devicePixelRatio || 1 - const outputScale = Math.min(deviceScale, 1.5) + const outputScale = Math.min(deviceScale, 1) canvas.width = viewport.width * outputScale canvas.height = viewport.height * outputScale canvas.style.width = `${viewport.width}px` @@ -259,13 +258,17 @@ export default { }, scheduleRender(pageNumber, { priority = false } = {}) { - if (!pageNumber || this.renderedPages.has(pageNumber)) return + if (!pageNumber || pageNumber > this.totalPages || this.renderedPages.has(pageNumber)) return if (this.renderQueue.includes(pageNumber)) return if (priority) { this.renderQueue.unshift(pageNumber) } else { this.renderQueue.push(pageNumber) } + const MAX_QUEUE_LENGTH = 5 + if (this.renderQueue.length > MAX_QUEUE_LENGTH) { + this.renderQueue.splice(MAX_QUEUE_LENGTH) + } this.processRenderQueue() }, @@ -275,7 +278,9 @@ export default { try { while (this.renderQueue.length) { const pageNumber = this.renderQueue.shift() + await new Promise((resolve) => requestAnimationFrame(resolve)) await this.renderSinglePage(pageNumber) + this.scheduleRender(pageNumber + 1) } } finally { this.isProcessingQueue = false @@ -430,7 +435,7 @@ export default { const options = { root: this.$refs.pdfWrapper, - rootMargin: '400px 0px', + rootMargin: '120px 0px', threshold: 0.01, }