Конфигурация:
Шаги по воспроизведению проблемы:
function onmessage () {
const pdfDocument = await pdfjs.getDocument('/some-hard-coded.pdf')
const page = await pdfDocument.getPage(1)
const viewport = pdfPage.getViewport(1)
const width = 250
const height = viewport.height * (width / viewport.width)
const canvas = new OffscreenCanvas(width, height)
const canvasContext = canvas.getContext('2d', { alpha: false })
return page.render({ canvasContext, viewport })
})
w = new Worker('sample-pdf.js');
Какое ожидаемое поведение? (добавить скриншот)
PDF будет отображаться в OffscreenCanvas
Что пошло не так? (добавить скриншот)
ReferenceError: документ не определен
в GenericFontLoader.insertRule (pdf.js: 10154)
в GenericFontLoader.bind (pdf.js: 10205)
в WorkerTransport.(pdf.js: 9177)
в LoopbackPort.MessageHandler._onComObjOnMessage (pdf.js: 12833)
в LoopbackPort.(pdf.js: 8681)
в Array.forEach ()
т.е. это не удается:
styleElement = this.styleElement = document.createElement ('стиль');
Проблема в отсутствии DOM. Проблема может быть связана с документацией, поскольку
Похоже (по сути) на дубликат проблемы №10039; скорее всего, для поддержки OffscreenCanvas
из коробки" потребуется изрядное количество повторного факторинга.
Спасибо. @Snuffleupagus Я видел эту проблему и должен был связать ее; проблемы не идентичны в том смысле, что:
OffscreenCanvas
можно использовать в основном потоке (т.е. его использование не ограничивается веб-рабочими);Другими словами, поддержка OffscreenCanvas
- это еще одна проблема, которая является возможной альтернативой CanvasElement
, но одного этого может быть недостаточно для решения этой проблемы.
Глядя на https://github.com/mozilla/pdf.js/blob/master/examples/node/pdf2png/pdf2png.js (пример узла), похоже, что вам может потребоваться создать canvasFactory
, тоже. Что произойдет, если вы это сделаете?
Как использовать pdf.js внутри веб-воркера?
Я импортировал это по этому.
// Worker.ts
import { pdfjs } from "react-pdf";
pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;
pdfjs.getDocument(...) => errors
Но при использовании getDocument
. Возвращает ошибку
Неперехваченная (в обещании) Ошибка: не удалось настроить поддельный воркер: «__webpack_require __ (...). Sure is not a function»
Самый полезный комментарий
Как использовать pdf.js внутри веб-воркера?
Я импортировал это по этому.
Но при использовании
getDocument
. Возвращает ошибку