Files
fn_registry/functions/browser/cdp_print_pdf.md
T
Egutierrez 9798aed2cf feat(browser): cdp_collect_console + cdp_print_pdf + cdp_select_option + cdp_set_file_input
Cuatro primitivas CDP nuevas para el dominio browser, base de nuevas tools del
browser_mcp:
- cdp_collect_console: snapshot temporal de console + exceptions + log entries
- cdp_print_pdf: Page.printToPDF -> []byte
- cdp_select_option: selecciona <option> en un <select> y dispara input/change
- cdp_set_file_input: sube archivos a un <input type=file> via DOM.setFileInputFiles

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 20:21:46 +02:00

3.9 KiB
Raw Blame History

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
cdp_print_pdf function go browser 1.0.0 impure func CdpPrintPDF(c *CDPConn, opts CdpPrintPDFOpts) ([]byte, error) Genera un PDF de la pagina actual via el metodo CDP Page.printToPDF y devuelve los bytes ya decodificados, sin tocar el disco. Usa transferMode ReturnAsBase64 (Chrome devuelve el PDF como base64 en el campo data) y lo decodifica a []byte. Aplica las opciones a los params: Landscape, PrintBackground y Scale siempre (Scale forzado a 1.0 si opts pide <= 0); PaperWidthIn/PaperHeightIn solo cuando son > 0, dejando el tamano de papel por defecto del navegador en caso contrario. Robusto ante paginas grandes. Primitiva reutilizable para devolver el PDF al LLM como document content o persistirlo a disco.
chrome
cdp
browser
automation
pdf
print
printToPDF
devtools
document
navegator
false error_go_core
encoding/base64
fmt
name desc
c conexión CDP activa (*CDPConn) contra Chrome con el target abierto
name desc
opts opciones de impresión (Landscape, PrintBackground, Scale, PaperWidthIn, PaperHeightIn en pulgadas)
bytes del PDF decodificados desde base64, o error si falla la generación o la decodificación false
functions/browser/cdp_print_pdf.go

Ejemplo

conn, _ := CdpConnect(9222)
CdpNavigate(conn, "https://example.com")

pdfData, err := CdpPrintPDF(conn, CdpPrintPDFOpts{
    Landscape:       false,
    PrintBackground: true,
    Scale:           1.0,
    PaperWidthIn:    8.27,  // A4
    PaperHeightIn:   11.69, // A4
})
// pdfData: bytes del PDF listos para escribir a disco o devolver al LLM
// os.WriteFile("example.pdf", pdfData, 0644)

Cuando usarla

Cuando necesitas el PDF de la página actual en memoria: para devolverlo al LLM como document content (bytes), para archivar el render de una página (factura, informe, dashboard) o como primitiva sobre la que un caller compone la escritura a disco. Úsala tras CdpNavigate + espera de carga (CdpWaitIdle) para asegurar que el contenido está renderizado antes de imprimir.

Gotchas

  • Impura: requiere Chrome vivo: necesita una conexión CDP activa (*CDPConn) contra una instancia de Chrome con el target abierto. No funciona sin navegador.
  • Solo en modo headless completo de impresión: Page.printToPDF funciona de forma fiable en Chrome headless. En modo headed (con UI), algunas builds de Chrome devuelven PrintToPDF is not implemented; si lo necesitas con UI, lanza Chrome con --headless=new.
  • Scale fuera de rango: Chrome acepta scale en [0.1, 2]. Esta función fuerza 1.0 cuando opts.Scale <= 0, pero no recorta valores válidos fuera de rango — si pasas 5.0, Chrome puede rechazar el comando con error.
  • Paper en pulgadas: PaperWidthIn/PaperHeightIn son pulgadas (la unidad nativa de CDP), no mm. A4 ≈ 8.27 × 11.69 in, Letter = 8.5 × 11 in. 0 deja el default del navegador (Letter).
  • Contenido lazy-load / dinámico: printToPDF captura el DOM en el instante de la llamada. Si la página carga contenido al hacer scroll o por JS diferido, espera a que termine (scroll + CdpWaitIdle) antes de imprimir.
  • PrintBackground apagado por defecto: igual que el diálogo de impresión de Chrome, los fondos CSS (colores e imágenes) no salen salvo que pongas PrintBackground: true.

Notas

Adición al dominio browser (estilo CDP del paquete): el .go vive junto a las demás funciones cdp_*.go en el mismo paquete browser. El struct CdpPrintPDFOpts se define en el mismo archivo. Chrome retorna el PDF como base64 (transferMode: "ReturnAsBase64", el default de CDP); esta función lo decodifica a []byte y lo devuelve sin escribir a disco — el caller decide el destino. Patrón gemelo de CdpScreenshotBytes para el caso de impresión a PDF.