Usando Venom para automatizar impressão de documentos
Venom é uma biblioteca de automação web baseada em Puppeteer. Muita gente quer usar ele para gerar PDFs e imprimir documentos automaticamente, e isso funciona sim, mas tem detalhes que os tutoriais básicos não mostram.Primeiro, a abordagem mais direta é usar o método page.pdf() do Chromium controlado pelo Venom. Você abre uma página, formata ela com CSS próprio, gera o PDF e manda imprimir. O código básico fica mais ou menos assim:
venom para imprimir PDFs com Chrome headless
O segredo é configurar o viewport e o paper size corretamente. Se você deixar o padrão, vai receber páginas A4 com margens enormes ou conteúdo cortado. A dica prática é definir o tamanho do papel antes de chamar o método pdf: const buffer = await page.pdf({ path: 'saida.pdf', format: 'A4', printBackground: true, margin: { top: '10mm', bottom: '10mm', left: '10mm', right: '10mm' } });
Depois disso, dependendo do seu objetivo, você pode salvar o arquivo ou enviar direto para a impressora. No Node.js, a forma mais simples de imprimir sem abrir o visualizador é usar o comando child_process.exec('print /p:"Nome da Impressora" arquivo.pdf') no Windows, ou cupsprint no Linux. No Mac, funciona com open -a PrintCenter ou cupsfilter. Um problema que eu encontrei na prática foi com impressoras que aceitam apenas PDFs com certa estrutura de página. Eu tinha um relatório que era gerado corretamente na tela, mas quando ia para a impressora profissional saía tudo distorcido. O problema era que o Venom aplicava o render do Chrome em 96 DPI por padrão. A solução foi adicionar viewport: { width: 1920, height: 1080, deviceScaleFactor: 2 } na configuração inicial do browser. Isso fez o Chrome renderizar em maior resolução e o PDF final ficou nítido na saída impressa.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Impressão direta via dialog do navegador
Se o seu caso é apenas disparar a caixa de diálogo de impressão do navegador, existe um caminho mais simples. Você navega até a URL que deseja imprimir e chama: await page.emulateMediaType('print'); await page.waitForTimeout(500); await page.print({});
O método print() do Venom invoca o dialog nativo de impressão do Chrome. Isso é útil quando você quer que o usuário escolha a impressora ou ajuste as configurações antes de imprimir. A desvantagem é que não é totalmente automatizado — você precisa interagir com o dialog ou esperar o usuário confirmar. Para automação 100% sem intervenção, o caminho do PDF + comando do sistema operacional é mais confiável. Eu recomendo esse método para scripts noturnos ou jobs que rodam sozinhos.
Pegadinhas comuns
Um erro frequente é não considerar o tempo de carregamento dos estilos. Se a página usa fontes externas ou layouts dinâmicos, o PDF pode sair sem formatação se você chamar o método pdf muito rápido. A solução é aguardar o network idle antes de gerar: await page.waitForNavigation({ waitUntil: 'networkidle0' });
Outro ponto importante: o Venom não imprime diretamente em impressoras de rede configuradas no SO. Ele controla o navegador, não o sistema de impressão. Para imprimir em múltiplas impressoras diferentes, você precisa criar lógica no seu script que escolha a impressora via comando do sistema operacional, passando o nome exato como aparece nas configurações do Windows ou Linux. Se o seu volume de impressão é alto, considere usar PDFtk ou Ghostscript para manipular os arquivos antes de enviar à impressora. O Venom gera o PDF, mas ferramentas de linha de comando lidam melhor com merges, paginação e compactação.