|
|
@@ -20,48 +20,9 @@
|
|
|
<script setup>
|
|
|
import { ref, onMounted } from "vue"
|
|
|
import * as PDF from "pdfjs-dist"
|
|
|
-// 引入 Vite 识别的 worker URL(处理哈希路径)
|
|
|
-import localWorkerUrl from "pdfjs-dist/build/pdf.worker.mjs?url"
|
|
|
+import pdfWorkerUrl from "pdfjs-dist/build/pdf.worker.mjs?url"
|
|
|
|
|
|
-let workerBlobUrl = null
|
|
|
-
|
|
|
-const initWorker = async () => {
|
|
|
- if (workerBlobUrl) return
|
|
|
-
|
|
|
- const pdfjsVersion = PDF.version
|
|
|
- const urls = [
|
|
|
- // 1. 优先使用 CDN,规避所有本地服务器配置问题
|
|
|
- `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfjsVersion}/build/pdf.worker.min.mjs`,
|
|
|
- `https://unpkg.com/pdfjs-dist@${pdfjsVersion}/build/pdf.worker.min.mjs`,
|
|
|
- // 2. 本地备选:Vite 处理后的路径
|
|
|
- localWorkerUrl,
|
|
|
- // 3. 库模式下的路径
|
|
|
- new URL("./pdf.worker.js", import.meta.url).toString(),
|
|
|
- ]
|
|
|
-
|
|
|
- let lastError = null
|
|
|
- for (const url of urls) {
|
|
|
- try {
|
|
|
- const response = await fetch(url)
|
|
|
- if (!response.ok) continue
|
|
|
-
|
|
|
- const arrayBuffer = await response.arrayBuffer()
|
|
|
- // 强制指定为 ESM 模块
|
|
|
- const blob = new Blob([arrayBuffer], { type: "text/javascript" })
|
|
|
- workerBlobUrl = URL.createObjectURL(blob)
|
|
|
- PDF.GlobalWorkerOptions.workerSrc = workerBlobUrl
|
|
|
- console.log("PDF Worker loaded successfully from:", url)
|
|
|
- return
|
|
|
- } catch (e) {
|
|
|
- lastError = e
|
|
|
- continue
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- console.error("All PDF worker paths failed", lastError)
|
|
|
- // 最后保底:直接尝试 localWorkerUrl
|
|
|
- PDF.GlobalWorkerOptions.workerSrc = localWorkerUrl
|
|
|
-}
|
|
|
+PDF.GlobalWorkerOptions.workerSrc = pdfWorkerUrl
|
|
|
|
|
|
const props = defineProps({
|
|
|
data: Array,
|
|
|
@@ -97,7 +58,6 @@ const scaleX = () => {
|
|
|
}
|
|
|
|
|
|
const loadFile = async () => {
|
|
|
- await initWorker()
|
|
|
pdfDoc = await PDF.getDocument(props.data).promise
|
|
|
pdf_pages.value = pdfDoc.numPages
|
|
|
renderPage()
|