構成:
問題を再現する手順:
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( 'style');
問題は、DOMがないことです。 PDF.jsにはノードの例があるため、問題はドキュメントの1つである可能性があります。または、問題が深く潜んでいる可能性があります。 いずれにせよ、ここにいくつかの明白なガイドラインがある場合に備えて、私はそれを報告したいと思いました。
(本質的に)問題#10039の複製のように見えます。 ほとんどの場合、 OffscreenCanvas
をすぐにサポートするには、かなりの量のリファクタリングが必要になります。
ありがとう。 @Snuffleupagus私はその問題を見たので、それをリンクする必要がありました。 問題は、次の意味で同一ではありません。
OffscreenCanvas
はメインスレッドで使用できます(つまり、その使用はWebワーカーに限定されません)。言い換えると、 OffscreenCanvas
サポートは、たまたまCanvasElement
代わりになる可能性のある別の問題ですが、それだけではこの問題を解決するには不十分な場合があります。
https://github.com/mozilla/pdf.js/blob/master/examples/node/pdf2png/pdf2png.js (ノードの例)を見ると、 canvasFactory
を作成する必要があるようです。 、 それも。 そうするとどうなりますか?
Webワーカー内で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
を使用する場合。 エラーを返します
Uncaught(in promise)エラー:偽のワーカーの設定に失敗しました: "__ webpack_require __(...)。ensure is not a function"
最も参考になるコメント
Webワーカー内でpdf.jsをどのように使用しますか?
これでインポートしました。
ただし、
getDocument
を使用する場合。 エラーを返します