const PDFJS_VERSION = '4.10.38';
const PDFJS_BASE = `https://cdn.jsdelivr.net/npm/pdfjs-dist@${PDFJS_VERSION}`;
let pdfjsLib = null;
async function loadPdfJs() {
if (pdfjsLib) return pdfjsLib;
pdfjsLib = await import(`${PDFJS_BASE}/build/pdf.mjs`);
pdfjsLib.GlobalWorkerOptions.workerSrc = `${PDFJS_BASE}/build/pdf.worker.mjs`;
return pdfjsLib;
}
export async function renderPdfToCanvas(pdfBytes, canvas, options = {}) {
const { page = 1, scale = 1.5 } = options;
const pdfjs = await loadPdfJs();
const loadingTask = pdfjs.getDocument({ data: pdfBytes.slice() });
const pdf = await loadingTask.promise;
const pageNumber = Math.min(Math.max(1, page), pdf.numPages);
const pdfPage = await pdf.getPage(pageNumber);
const viewport = pdfPage.getViewport({ scale });
const context = canvas.getContext('2d');
canvas.width = viewport.width;
canvas.height = viewport.height;
await pdfPage.render({ canvasContext: context, viewport }).promise;
return { pageCount: pdf.numPages, pageNumber };
}
export async function renderPdfToContainer(pdfBytes, container, options = {}) {
const { scale = 1.5 } = options;
const pdfjs = await loadPdfJs();
container.replaceChildren();
const loadingTask = pdfjs.getDocument({ data: pdfBytes.slice() });
const pdf = await loadingTask.promise;
for (let i = 1; i <= pdf.numPages; i++) {
const pdfPage = await pdf.getPage(i);
const viewport = pdfPage.getViewport({ scale });
const canvas = document.createElement('canvas');
canvas.className = 'pdf-page';
canvas.width = viewport.width;
canvas.height = viewport.height;
const context = canvas.getContext('2d');
await pdfPage.render({ canvasContext: context, viewport }).promise;
container.appendChild(canvas);
}
return { pageCount: pdf.numPages };
}