pdf预览
This commit is contained in:
parent
576f940531
commit
dc5a57fdda
|
|
@ -61,7 +61,7 @@ if (resolvedWorkerSrc) {
|
||||||
pdfjsLib.GlobalWorkerOptions.workerSrc = null
|
pdfjsLib.GlobalWorkerOptions.workerSrc = null
|
||||||
}
|
}
|
||||||
|
|
||||||
const DEFAULT_SCALE = 1
|
const DEFAULT_SCALE = 0.95
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DocumentSearch',
|
name: 'DocumentSearch',
|
||||||
|
|
@ -224,6 +224,9 @@ export default {
|
||||||
}
|
}
|
||||||
await page.render(renderContext).promise
|
await page.render(renderContext).promise
|
||||||
|
|
||||||
|
this.pageTextDivs[index] = []
|
||||||
|
|
||||||
|
const scheduleTextLayer = () => {
|
||||||
const textLayerDiv = document.createElement('div')
|
const textLayerDiv = document.createElement('div')
|
||||||
textLayerDiv.className = 'textLayer'
|
textLayerDiv.className = 'textLayer'
|
||||||
textLayerDiv.style.width = `${viewport.width}px`
|
textLayerDiv.style.width = `${viewport.width}px`
|
||||||
|
|
@ -237,7 +240,8 @@ export default {
|
||||||
eventBus: this.eventBus,
|
eventBus: this.eventBus,
|
||||||
})
|
})
|
||||||
|
|
||||||
const textContent = await page.getTextContent()
|
page.getTextContent()
|
||||||
|
.then((textContent) => {
|
||||||
textLayer.setTextContent(textContent)
|
textLayer.setTextContent(textContent)
|
||||||
textLayer.render()
|
textLayer.render()
|
||||||
|
|
||||||
|
|
@ -246,6 +250,18 @@ export default {
|
||||||
div.dataset.originalText = div.textContent
|
div.dataset.originalText = div.textContent
|
||||||
})
|
})
|
||||||
this.pageTextDivs[index] = textDivs
|
this.pageTextDivs[index] = textDivs
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.warn(`获取第 ${pageNumber} 页文本失败`, err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof window.requestIdleCallback === 'function') {
|
||||||
|
window.requestIdleCallback(scheduleTextLayer, { timeout: 500 })
|
||||||
|
} else {
|
||||||
|
setTimeout(scheduleTextLayer, 40)
|
||||||
|
}
|
||||||
|
|
||||||
this.renderedPages.set(pageNumber, { container, viewport })
|
this.renderedPages.set(pageNumber, { container, viewport })
|
||||||
if (this.observer) {
|
if (this.observer) {
|
||||||
this.observer.unobserve(container)
|
this.observer.unobserve(container)
|
||||||
|
|
@ -265,7 +281,7 @@ export default {
|
||||||
} else {
|
} else {
|
||||||
this.renderQueue.push(pageNumber)
|
this.renderQueue.push(pageNumber)
|
||||||
}
|
}
|
||||||
const MAX_QUEUE_LENGTH = 5
|
const MAX_QUEUE_LENGTH = 4
|
||||||
if (this.renderQueue.length > MAX_QUEUE_LENGTH) {
|
if (this.renderQueue.length > MAX_QUEUE_LENGTH) {
|
||||||
this.renderQueue.splice(MAX_QUEUE_LENGTH)
|
this.renderQueue.splice(MAX_QUEUE_LENGTH)
|
||||||
}
|
}
|
||||||
|
|
@ -280,7 +296,6 @@ export default {
|
||||||
const pageNumber = this.renderQueue.shift()
|
const pageNumber = this.renderQueue.shift()
|
||||||
await new Promise((resolve) => requestAnimationFrame(resolve))
|
await new Promise((resolve) => requestAnimationFrame(resolve))
|
||||||
await this.renderSinglePage(pageNumber)
|
await this.renderSinglePage(pageNumber)
|
||||||
this.scheduleRender(pageNumber + 1)
|
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
this.isProcessingQueue = false
|
this.isProcessingQueue = false
|
||||||
|
|
@ -582,11 +597,15 @@ export default {
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
pointer-events: none;
|
pointer-events: auto;
|
||||||
|
user-select: text;
|
||||||
|
-webkit-user-select: text;
|
||||||
}
|
}
|
||||||
|
|
||||||
.textLayer>span {
|
.textLayer>span {
|
||||||
cursor: text;
|
cursor: text;
|
||||||
|
user-select: text;
|
||||||
|
-webkit-user-select: text;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-highlight {
|
.search-highlight {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue