renderPdfToImageDataUrls function exported ✗ 0.0%

Last updated: 2026-03-03T12:11:09.168Z

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)

graph LR renderPdfToImageDataUrls["renderPdfToImageDataUrls"] ensureWorker["ensureWorker"] renderPdfToImageDataUrls -->|calls| ensureWorker style renderPdfToImageDataUrls fill:#dbeafe,stroke:#2563eb,stroke-width:2px click renderPdfToImageDataUrls "c45693e979eeef11.html" click ensureWorker "7a7b52f7c0be71aa.html"
TargetType
ensureWorker calls

Impact (Incoming)

graph LR renderPdfToImageDataUrls["renderPdfToImageDataUrls"] removeModal["removeModal"] removeModal -->|uses| renderPdfToImageDataUrls style renderPdfToImageDataUrls fill:#dbeafe,stroke:#2563eb,stroke-width:2px click renderPdfToImageDataUrls "c45693e979eeef11.html" click removeModal "5128383343d69d24.html"
SourceType
removeModal uses