Imprima HTML, PDF, cupom térmico (ESC/POS) e etiquetas Zebra (ZPL) diretamente do seu sistema web — sem o diálogo de impressão do navegador. Escolha impressora, cópias, orientação, margens, cabeçalho e rodapé com poucas linhas de código.
O PrintAgentClient é um componente JavaScript que se conecta, via WebSocket local, a um agente instalado na máquina do usuário (um executável leve para Windows). Com ele, qualquer sistema web pode enviar documentos para impressão diretamente na impressora escolhida — sem abrir o diálogo padrão do navegador e sem depender de plugins ou extensões.
Não é só HTML: o agente também imprime PDF, cupons em impressoras térmicas via ESC/POS (rede ou porta serial) e etiquetas Zebra via ZPL — cobrindo relatórios, comprovantes, cupons fiscais e etiquetas com controle total sobre impressora, cópias, margens, cabeçalho e rodapé.
Impressão de HTML, sem diálogo do navegador
Impressão de PDF direto do sistema
Cupom térmico via ESC/POS (rede ou serial)
Etiquetas Zebra via ZPL
Escolha de impressora, cópias e papel
Margens, cabeçalho e rodapé personalizáveis
Se você já usa a plataforma Maker, não precisa programar nada — temos as funções do Print Agent prontas para importar, já no padrão de Fluxo do Maker.
Isoft Brasil - Print - Inicializar PrintAgent
Isoft Brasil - Print - Lista Impressoras
Isoft Brasil - Print - Imprimir PDF
Isoft Brasil - Print - ESC/POS - Imp. térmica Rede
Isoft Brasil - Print - comandos ZPL para impressão
Marque a opção "Também sou usuário do Maker" no formulário de download e enviaremos as funções prontas para o seu e-mail.
O cliente abre um WebSocket local (porta padrão 9099) com reconexão automática
import { PrintAgentClient } from './PrintAgentClient';
const print = new PrintAgentClient({ port: 9099 });
print.on('connect', () => console.log('Agente pronto'));
print.on('disconnect', () => console.warn('Reconectando...'));
print.on('error', (err) => console.error(err));
print.connect(); // reconexão automática com backoff exponencial
const { agentVersion, latency } = await print.ping();
// { agentVersion: "1.0.0", latency: 3 }
const impressoras = await print.listPrinters();
// [{ name: "EPSON L3250", isDefault: true, status: 0 }, ...]
Todos os campos aceitos pela função de impressão de HTML — para PDF, ESC/POS e ZPL, veja a seção Outros Formatos
| Campo | Tipo | Descrição |
|---|---|---|
html |
string |
HTML completo a imprimir — pode ser document.documentElement.outerHTML
ou qualquer string HTML montada
|
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
printer |
string | impressora padrão do Windows | Nome exato da impressora — use listPrinters() para obter os nomes disponíveis |
copies |
number | 1 | Quantidade de cópias |
landscape |
boolean | false | true = paisagem, false = retrato |
pageSize |
string | 'A4' | 'A4', 'A3', 'Letter', 'Legal', 'Tabloid' |
scaleFactor |
number | 100 | Zoom de impressão em % — útil para ajustar margens apertadas |
printBackground |
boolean | true | Imprime cores/imagens de fundo do CSS |
margins |
object | margens da impressora | Controle fino de margens (veja abaixo) |
header |
string | — | Texto no cabeçalho de cada página |
footer |
string | — | Texto no rodapé — suporta &P (página atual) e &T (total de páginas) |
marginsmargins: {
marginType: 'custom', // 'default' | 'none' | 'printableArea' | 'custom'
top: 10, // mm — só usado quando marginType = 'custom'
bottom: 10,
left: 15,
right: 15,
}
Conecte o agente uma única vez e chame printHtml em qualquer botão de impressão
import { PrintAgentClient } from './PrintAgentClient';
const print = new PrintAgentClient();
print.on('connect', () => console.log('Agente pronto'));
print.connect();
// Em qualquer botão de impressão:
async function imprimirRelatorio() {
const html = document.getElementById('relatorio').outerHTML;
await print.printHtml({
html,
printer: 'HP LaserJet Pro', // opcional
copies: 1,
pageSize: 'A4',
landscape: false,
printBackground: true,
scaleFactor: 100,
margins: { marginType: 'custom', top: 15, bottom: 15, left: 20, right: 20 },
footer: 'Página &P de &T',
});
}
Além de HTML, o agente também imprime PDF, cupons térmicos e etiquetas Zebra
Envie um arquivo PDF como base64. O agente salva em arquivo temporário, abre no Chromium e imprime sem exibir nenhuma janela.
const buf = await pdfBlob.arrayBuffer();
const base64 = btoa(String.fromCharCode(...new Uint8Array(buf)));
await print.printPdf({ base64, printer: 'HP LaserJet', copies: 1 });
Envio de comandos ESC/POS em base64 para impressoras térmicas de cupom. Conexão via TCP/IP (rede) ou porta serial (COM).
await print.printEscPos({
connection: { type: 'tcp', host: '192.168.1.50', port: 9100 },
data: base64EscPosBytes, // Uint8Array → base64
});
// Via porta serial (requer módulo serialport no agente):
connection: { type: 'com', port: 'COM3', baudRate: 9600 }
Envio de comandos ZPL para impressoras Zebra via TCP, geralmente na porta 9100.
await print.printZpl({
host: '192.168.1.60',
port: 9100,
zpl: '^XA^FO50,50^A0N,30,30^FDOlá Mundo^FS^XZ',
});
O agente precisa estar instalado na máquina do usuário. Se não estiver conectado, o
PrintAgentClient lança uma exceção com a mensagem
"Agente não conectado" — capture-a e mostre um aviso orientando o
usuário a instalar o executável. Se a impressora não responder dentro do tempo limite, o erro
retornado é um Timeout.
try {
await print.printHtml({ html });
} catch (err) {
if (err.message.includes('não conectado'))
alert('Instale e abra o IsoftBrasil Print Agent');
else if (err.message.includes('Timeout'))
alert('Impressora não respondeu');
else
alert(`Erro: ${err.message}`);
}
Preencha seus dados abaixo. Enviaremos o link de download para o e-mail informado — e, se você usa o Maker, as funções prontas também.
Fale com a nossa equipe e receba o passo a passo de instalação e integração.
Falar com a iSoft Brasil