Pdf.js: рд╡реЗрдм-рд╡рд░реНрдХрд░ рдореЗрдВ PDF.js рдХреИрдирд╡рд╛рд╕ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЪрд▓рд╛рдПрдБ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 29 рдирд╡ре░ 2018  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mozilla/pdf.js

рд╡рд┐рдиреНрдпрд╛рд╕:

  • рдХреНрд░реЛрдо 71
  • рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдЙрд╕рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг: рдХреЛрдИ рднреА
  • рдкреАрдбреАрдПрдл.рдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг: 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 рдХреЛ рд░реЗрдВрдбрд░ рдХрд░реЗрдЧрд╛

рдХреНрдпрд╛ рдЧрд▓рдд рд╣реБрдЖ? (рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЬреЛрдбрд╝реЗрдВ)

рд╕рдВрджрд░реНрдн рддреНрд░реБрдЯрд┐: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ
GenericFontLoader.insertRule рдкрд░ (pdf.js:10154)
GenericFontLoader.bind рдкрд░ (pdf.js:10205)
рд╡рд░реНрдХрд░рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдкрд░ред(рдкреАрдбреАрдПрдл.рдЬреЗрдПрд╕:9177)
LoopbackPort.MessageHandler._onComObjOnMessage рдкрд░ (pdf.js:12833)
рд▓реВрдкрдмреИрдХрдкреЛрд░реНрдЯ рдкрд░ред(рдкреАрдбреАрдПрдл.рдЬреЗрдПрд╕:8681)
Array.forEach рдкрд░ ()

рдпрд╛рдиреА рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ:

StyleElement = this.styleElement = document.createElement('style');

рд╕рдорд╕реНрдпрд╛ рдПрдХ рдбреЛрдо рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╣реИред рд╕рдорд╕реНрдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ PDF.js рдореЗрдВ рдПрдХ Node рдЙрджрд╛рд╣рд░рдг рд╣реИ , рдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рдЧрд╣рд░реЗ рдореЗрдВ рдЫрд┐рдкреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЕрдЧрд░ рдпрд╣рд╛рдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдереЗред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрдк рд╡реЗрдм-рд╡рд░реНрдХрд░ рдХреЗ рдЕрдВрджрд░ 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__(...)ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреЛрдИ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ"

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

(рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ) рдЕрдВрдХ #10039 рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ; рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, OffscreenCanvas рд▓рд┐рдП рдЖрдЙрдЯ-рдСрдл-рдж-рдмреЙрдХреНрд╕ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд░реА-рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдзрдиреНрдпрд╡рд╛рджред @Snuffleupagus рдореИрдВрдиреЗ рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрд╛, рдФрд░ рдЗрд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛; рд╕рдорд╕реНрдпрд╛рдПрдБ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ рдХрд┐:

  1. OffscreenCanvas рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рдереНрд░реЗрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрдм рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ);
  2. рдПрдХ рд╡реЗрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдСрдлрд╕реНрдХреНрд░реАрди рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА рдСрдлрд╕реНрдХреНрд░реАрди рдХреИрдирд╡рд╛рд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдХреИрдирд╡рд╛рд╕ рдкреЙрд▓реАрдлрд┐рд▓ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ);
  3. PDF.js рдХреА рд╡реЗрдм рд╡рд░реНрдХрд░реНрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ 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__(...)ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреЛрдИ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ"

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

BrennanDuffey picture BrennanDuffey  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

timvandermeij picture timvandermeij  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

THausherr picture THausherr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

smit-modi picture smit-modi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hp011235 picture hp011235  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ