Pdf.js: Запустить рендеринг холста PDF.js в веб-воркере

Созданный на 29 нояб. 2018  ·  4Комментарии  ·  Источник: mozilla/pdf.js

Конфигурация:

  • Хром 71
  • Операционная система и ее версия: любая
  • Версия PDF.js: 2.0.943
  • Расширение браузера: нет

Шаги по воспроизведению проблемы:

  1. Напишите веб-воркер так:
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 })
})
  1. Назовите это, например, 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. Проблема может быть связана с документацией, поскольку

Самый полезный комментарий

Как использовать 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»

Все 4 Комментарий

Похоже (по сути) на дубликат проблемы №10039; скорее всего, для поддержки OffscreenCanvas из коробки" потребуется изрядное количество повторного факторинга.

Спасибо. @Snuffleupagus Я видел эту проблему и должен был связать ее; проблемы не идентичны в том смысле, что:

  1. OffscreenCanvas можно использовать в основном потоке (т.е. его использование не ограничивается веб-рабочими);
  2. Веб-исполнителю не нужно использовать OffscreenCanvas (то есть может работать полифил Canvas, отличный от OffscreenCanvas);
  3. Работающий OffscreenCanvas может быть не единственной проблемой PDF.js в веб-воркерах.

Другими словами, поддержка 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»

Была ли эта страница полезной?
0 / 5 - 0 рейтинги