renderPdfToImageDataUrls function exported ✗ 0.0%
Last updated: 2026-03-03T12:11:09.168Z
Location
Metrics
LOC: 58
Complexity: 4
Params: 4
Coverage: 0.0% (0/30 lines, 0x executed)
Signature
renderPdfToImageDataUrls(
buffer: ArrayBuffer,
maxPages = 3,
scale = 1.5,
): : Promise<string[]>
Summary
Renders the first maxPages pages of a PDF ArrayBuffer to JPEG data URLs using PDF.js + an HTMLCanvasElement (requires DOM — popup/devtools context). These data URLs can later be converted to Blobs and sent as image parts to the Chrome AI Prompt API.
Tags
#@param buffer - Raw PDF bytes#@param maxPages - Maximum number of pages to render (default 3)#@param scale - Render scale / resolution (default 1.5)
Source Code
export async function renderPdfToImageDataUrls(
buffer: ArrayBuffer,
maxPages = 3,
scale = 1.5,
): Promise<string[]> {
log.debug(
`renderPdfToImageDataUrls: buffer=${(buffer.byteLength / 1024).toFixed(1)}KB, maxPages=${maxPages}, scale=${scale}`,
);
await ensureWorker();
const pdfjsLib = await import("pdfjs-dist");
const loadingTask = pdfjsLib.getDocument({ data: buffer });
const pdf = await loadingTask.promise;
const totalPages = pdf.numPages;
const pageCount = Math.min(totalPages, maxPages);
log.debug(
`PDF carregado: ${totalPages} página(s) total, renderizando ${pageCount}`,
);
const dataUrls: string[] = [];
for (let pageNum = 1; pageNum <= pageCount; pageNum++) {
try {
const page = await pdf.getPage(pageNum);
const viewport = page.getViewport({ scale });
const canvas = document.createElement("canvas");
canvas.width = Math.round(viewport.width);
canvas.height = Math.round(viewport.height);
const ctx = canvas.getContext("2d");
if (!ctx) {
log.warn(
`Página ${pageNum}: não foi possível obter contexto 2D do canvas.`,
);
page.cleanup();
continue;
}
await page.render({ canvasContext: ctx, viewport, canvas }).promise;
const dataUrl = canvas.toDataURL("image/jpeg", 0.85);
log.debug(
`Página ${pageNum} renderizada: ${canvas.width}×${canvas.height}px, ${(dataUrl.length / 1024).toFixed(1)}KB`,
);
dataUrls.push(dataUrl);
page.cleanup();
} catch (pageErr) {
log.warn(`Falha ao renderizar página ${pageNum}:`, pageErr);
}
}
await pdf.cleanup();
log.info(
`renderPdfToImageDataUrls concluído: ${dataUrls.length}/${pageCount} páginas renderizadas.`,
);
return dataUrls;
}
Dependencies (Outgoing)
| Target | Type |
|---|---|
| ensureWorker | calls |
Impact (Incoming)
| Source | Type |
|---|---|
| removeModal | uses |