Используете pdf. js внутри WebWorker? - PullRequest
0 голосов
/ 24 апреля 2020

Я использую pdf. js для создания изображений из PDF-документов.

Вот мой код

import { pdfjs } from "react-pdf";
pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`
// GENERATE IMAGES

const loadingTask = pdfjs.getDocument(dataUrl);
const pdf = await loadingTask.promise;
const promises = Array.from(new Array(pdf.numPages)).map((_, index) => {
  return new Promise((resolve, reject) => {
    var canvas = document.createElement("canvas");
    pdf.getPage(index + 1).then((page) => {
      var vp = page.getViewport({ scale: 1 });
      canvas.width = 595;
      canvas.height = 842;
      var scale = Math.min(canvas.width / vp.width, canvas.height / vp.height);
      const canvasContext = canvas.getContext("2d");
      if (!canvasContext) return reject("Can not get context");
      const renderedPage = page.render({
        canvasContext,
        viewport: page.getViewport({ scale }),
      });
      return renderedPage.promise.then(() => {
        const url = canvas.toDataURL("image/jpeg");
        resolve(url);
      });
    });
  });
});



Работает нормально. Но во время процесса генерации он блокирует основной поток, что вызывает некоторые проблемы с пользовательским интерфейсом.

Итак, я хочу переместить все логи c в веб-рабочий для освобождения основного потока.

Но при работе в веб-работнике возникает ошибка:

pdf. js: 11210 Uncaught (в обещании) Ошибка: сбой при настройке поддельного работника: " webpack_require (...). Убедитесь, что это не функция ".

Вызывается из этой функции setupFakeWorkerGlobal

Я думаю, что он не может загрузить workerSrc, поэтому он должен использовать fake worker с ошибкой броска. : (

Буду признателен за любую помощь.

...