import * as pdfjsLib from "pdfjs-dist" import pdfWorkerSrc from "pdfjs-dist/build/pdf.worker.mjs?url" import { PAGE_WIDTH } from "../../../utils/exam-canvas/model" pdfjsLib.GlobalWorkerOptions.workerSrc = pdfWorkerSrc export interface PdfPageImage { pageNumber: number src: string width: number height: number } export async function loadPdfPageImages(pdfBytes: ArrayBuffer, targetWidth = PAGE_WIDTH): Promise { const pdf = await pdfjsLib.getDocument({ data: new Uint8Array(pdfBytes) }).promise const pages: PdfPageImage[] = [] for (let pageNumber = 1; pageNumber <= pdf.numPages; pageNumber += 1) { const page = await pdf.getPage(pageNumber) const baseViewport = page.getViewport({ scale: 1 }) const scale = targetWidth / baseViewport.width const viewport = page.getViewport({ scale }) const canvas = document.createElement("canvas") canvas.width = Math.ceil(viewport.width) canvas.height = Math.ceil(viewport.height) const context = canvas.getContext("2d") if (!context) throw new Error("Unable to create PDF render canvas") await page.render({ canvasContext: context, viewport }).promise pages.push({ pageNumber, src: canvas.toDataURL("image/png"), width: canvas.width, height: canvas.height, }) } return pages }