jinx 1 месяц назад
Родитель
Сommit
005a995edd

Разница между файлами не показана из-за своего большого размера
+ 31 - 0
public/static/js/pdf.worker.min.js


+ 22 - 2
src/components/FileReader/pdf.vue

@@ -51,7 +51,6 @@ import {
   GlobalWorkerOptions,
 } from "pdfjs-dist/legacy/build/pdf.mjs";
 import { DynamicScroller, DynamicScrollerItem } from "vue-virtual-scroller";
-import PdfWorker from "pdfjs-dist/legacy/build/pdf.worker.min.mjs?url";
 import { getThumb } from "@/utils/file";
 import PdfVirtualPage from "@/components/FileReader/PdfVirtualPage.vue";
 
@@ -60,7 +59,26 @@ import "vue-virtual-scroller/dist/vue-virtual-scroller.css";
 const RANGE_CHUNK_SIZE = 32 * 1024;
 const DEFAULT_PAGE_RATIO = 1.414;
 
-GlobalWorkerOptions.workerSrc = PdfWorker;
+const getPdfWorkerSrc = () => {
+  const base = import.meta.env.BASE_URL || "/";
+  const normalizedBase = base.endsWith("/") ? base : `${base}/`;
+  return `${normalizedBase}static/js/pdf.worker.min.js`;
+};
+
+const ensurePdfWorker = () => {
+  const workerSrc = getPdfWorkerSrc();
+  GlobalWorkerOptions.workerSrc = workerSrc;
+
+  if (GlobalWorkerOptions.workerPort || typeof Worker === "undefined") {
+    return;
+  }
+
+  try {
+    GlobalWorkerOptions.workerPort = new Worker(workerSrc, { type: "module" });
+  } catch {
+    // workerSrc keeps PDF.js fallback on the same static js path.
+  }
+};
 
 const props = defineProps({
   url: {
@@ -127,6 +145,8 @@ const loadPdfDocument = async (source) => {
     return;
   }
 
+  ensurePdfWorker();
+
   const currentToken = loadToken;
   loadingTask = getDocument(source);
 

+ 22 - 2
src/views/mobile/components/FileReader/pdf.vue

@@ -51,7 +51,6 @@ import {
   GlobalWorkerOptions,
 } from "pdfjs-dist/legacy/build/pdf.mjs";
 import { DynamicScroller, DynamicScrollerItem } from "vue-virtual-scroller";
-import PdfWorker from "pdfjs-dist/legacy/build/pdf.worker.min.mjs?url";
 import { getThumb } from "@/utils/file";
 import PdfVirtualPage from "@/components/FileReader/PdfVirtualPage.vue";
 
@@ -60,7 +59,26 @@ import "vue-virtual-scroller/dist/vue-virtual-scroller.css";
 const RANGE_CHUNK_SIZE = 32 * 1024;
 const DEFAULT_PAGE_RATIO = 1.414;
 
-GlobalWorkerOptions.workerSrc = PdfWorker;
+const getPdfWorkerSrc = () => {
+  const base = import.meta.env.BASE_URL || "/";
+  const normalizedBase = base.endsWith("/") ? base : `${base}/`;
+  return `${normalizedBase}static/js/pdf.worker.min.js`;
+};
+
+const ensurePdfWorker = () => {
+  const workerSrc = getPdfWorkerSrc();
+  GlobalWorkerOptions.workerSrc = workerSrc;
+
+  if (GlobalWorkerOptions.workerPort || typeof Worker === "undefined") {
+    return;
+  }
+
+  try {
+    GlobalWorkerOptions.workerPort = new Worker(workerSrc, { type: "module" });
+  } catch {
+    // workerSrc keeps PDF.js fallback on the same static js path.
+  }
+};
 
 const props = defineProps({
   url: {
@@ -127,6 +145,8 @@ const loadPdfDocument = async (source) => {
     return;
   }
 
+  ensurePdfWorker();
+
   const currentToken = loadToken;
   loadingTask = getDocument(source);