Configuración:
Pasos para reproducir el problema:
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');
¿Cuál es el comportamiento esperado? (agregar captura de pantalla)
El PDF se representaría en OffscreenCanvas
¿Qué salió mal? (agregar captura de pantalla)
ReferenceError: el documento no está definido
en GenericFontLoader.insertRule (pdf.js: 10154)
en GenericFontLoader.bind (pdf.js: 10205)
en WorkerTransport.(pdf.js: 9177)
en LoopbackPort.MessageHandler._onComObjOnMessage (pdf.js: 12833)
en LoopbackPort.(pdf.js: 8681)
en Array.forEach ()
es decir, esto está fallando:
styleElement = this.styleElement = document.createElement ('estilo');
El problema es la ausencia de DOM. El problema puede ser de documentación, ya que PDF.js tiene un ejemplo de Node , o puede haber problemas acechando en las profundidades. En cualquier caso, quería informarlo en caso de que hubiera algunas pautas obvias aquí.
Parece (esencialmente) un duplicado del número 10039; lo más probable es que se requiera una buena cantidad de refactorización para que OffscreenCanvas
sea compatible de forma inmediata.
Gracias. @Snuffleupagus Vi ese problema y debería haberlo vinculado; los problemas no son idénticos en el sentido de que:
OffscreenCanvas
se puede usar en el hilo principal (es decir, su uso no se limita a los trabajadores web);En otras palabras, OffscreenCanvas
support es otro problema que resulta ser una posible alternativa a CanvasElement
, pero eso por sí solo puede no ser suficiente para resolver este problema.
Mirando https://github.com/mozilla/pdf.js/blob/master/examples/node/pdf2png/pdf2png.js (un ejemplo de nodo), parece que es posible que deba hacer un canvasFactory
, también. ¿Qué pasa si haces eso?
¿Cómo se usa pdf.js dentro de un trabajador web?
Lo importé por esto.
// 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
Pero cuando se usa getDocument
. Devuelve un error
Error no detectado (en promesa): No se pudo configurar el trabajador falso: "__webpack_require __ (...). Asegúrese de que no es una función"
Comentario más útil
¿Cómo se usa pdf.js dentro de un trabajador web?
Lo importé por esto.
Pero cuando se usa
getDocument
. Devuelve un error