Impressão direta via HTTP para softwares web
O AGGM Server Print permite impressão direta de conteúdo enviado por aplicações web sem exibir a caixa de diálogo da impressora. O programa atua como um servidor local que escuta em uma porta definida, e ao receber uma requisição, envia o documento diretamente para a impressora padrão configurada.
http://apiprint.seudominio.com/).Para dúvidas ou problemas, entre em contato pelo e-mail: [email protected]
<?php
error_reporting(0);
ini_set("display_errors", 0);
date_default_timezone_set('America/Sao_Paulo');
function enviarParaImpressora($conteudo, $url, $tipo = 'html') {
$headers = [
'html' => 'Content-type: text/html',
'pdf' => 'Content-type: application/pdf',
];
$content = ($tipo === 'pdf') ? file_get_contents($conteudo) : $conteudo;
$context = stream_context_create([
'http' => [
'header' => $headers[$tipo] ?? $headers['html'],
'method' => 'POST',
'content' => $content,
'timeout' => ($tipo === 'pdf') ? 60 : 5
]
]);
$resposta = file_get_contents($url, false, $context);
if ($resposta === false) {
return "Não foi possível enviar a impressão. Verifique se o servidor está online.";
}
$dados = json_decode($resposta);
return "Status: {$dados->status} Impressão enviadaImpressora: {$dados->impressora}";
}
$urlServidor = 'https://1402-186-233-109-200.ngrok-free.app/';
$pagina = $_GET['pg'] ?? '';
if ($pagina === 'paises') {
$html = implode('', ['Brasil', 'Estados Unidos', 'Angola', 'Afeganistão', 'Ruanda', 'Cingapura']);
echo enviarParaImpressora($html, $urlServidor, 'html');
} else if ($pagina === 'texto') {
$html = "
<html>
<head>
<style>
body { font-family: Arial; font-size: 14pt; }
h1 { color: blue; }
p { margin-bottom: 10px; }
</style>
</head>
<body>
<h1>Título da impressão</h1>
<p>Este é um texto formatado</b> enviado do PHP.
<img src='https://wallpapers.com/images/hd/minion-pictures-tpgty658tjf5cai7.jpg' width='300'></p>
</body>
</html>
";
echo enviarParaImpressora($html, $urlServidor, 'html');
} else if ($pagina === 'pdf') {
echo enviarParaImpressora('https://demos-teste.intelsystem.app/teste.pdf', $urlServidor, 'pdf');
}
?>
<a href="?pg=paises">Nomes de países</a><br>
<a href="?pg=texto">Texto teste</a><br>
<a href="?pg=pdf">Imprimir PDF teste</a><br>
<?php
require 'vendor/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\EscposImage;
use Mike42\Escpos\PrintConnectors\NetworkPrintConnector;
// ===============================
// CONFIGURAÇÃO DA IMPRESSORA
// ===============================
$printerIP = "192.168.1.1";
$printerPort = 9100;
try {
// Conecta na impressora pela rede
$connector = new NetworkPrintConnector($printerIP, $printerPort);
$printer = new Printer($connector);
// ===============================
// LOGO (Opcional)
// ===============================
if (file_exists("logo.png")) {
$logo = EscposImage::load("logo.png");
$printer->setJustification(Printer::JUSTIFY_CENTER);
$printer->bitImage($logo);
$printer->feed(1);
}
// ===============================
// CABEÇALHO
// ===============================
$printer->setJustification(Printer::JUSTIFY_CENTER);
$printer->text("================================\n");
$printer->text(" LOJA EXEMPLO LTDA\n");
$printer->text(" CNPJ: 12.345.678/0001-99\n");
$printer->text(" Rua Exemplo, 123 - Centro\n");
$printer->text(" Tel: (11) 99999-9999\n");
$printer->text("================================\n\n");
$printer->text("DOCUMENTO AUXILIAR DE VENDA\n");
$printer->text("NAO E DOCUMENTO FISCAL\n\n");
// ===============================
// DADOS DA VENDA
// ===============================
$printer->setJustification(Printer::JUSTIFY_LEFT);
$printer->text("DAV: 000001\n");
$printer->text("Data: " . date("d/m/Y H:i:s") . "\n");
$printer->text("Cliente: JOAO DA SILVA\n");
$printer->text("--------------------------------\n");
$printer->text("Descricao Qtd Total\n");
$printer->text("--------------------------------\n");
$printer->text("Coca-Cola 2L 2 20,00\n");
$printer->text("Arroz 5Kg 1 28,90\n");
$printer->text("Feijao 1Kg 3 26,70\n");
$printer->text("--------------------------------\n");
// ===============================
// TOTAIS
// ===============================
$printer->setJustification(Printer::JUSTIFY_RIGHT);
$printer->text("Subtotal: R$ 75,60\n");
$printer->text("Desconto: R$ 5,60\n");
$printer->text("TOTAL: R$ 70,00\n");
$printer->feed();
// ===============================
// PAGAMENTO
// ===============================
$printer->setJustification(Printer::JUSTIFY_LEFT);
$printer->text("Forma de Pagamento:\n");
$printer->text("PIX\n\n");
// ===============================
// QR CODE (Opcional)
// ===============================
$printer->setJustification(Printer::JUSTIFY_CENTER);
$printer->qrCode(
"https://meusite.com.br",
Printer::QR_ECLEVEL_L,
6,
Printer::QR_MODEL_2
);
$printer->feed();
// ===============================
// RODAPÉ
// ===============================
$printer->text("OBRIGADO PELA PREFERENCIA!\n");
$printer->text("VOLTE SEMPRE!\n");
$printer->feed(3);
// Corta o papel
$printer->cut();
// Fecha a conexão
$printer->close();
header('Content-Type: application/json');
echo json_encode([
"success" => true,
"host" => $printerIP . ":" . $printerPort,
"message" => "Impressão realizada com sucesso."
]);
} catch (Exception $e) {
header('Content-Type: application/json');
echo json_encode([
"success" => false,
"host" => $printerIP . ":" . $printerPort,
"message" => $e->getMessage()
]);
}
?>
<?php
$url = "http://localhost:3001/api/print";
$dados = [
"commands" => [
// LOGO
[
"type" => "image",
"value" => "https://redis.test/pdf/logo.png",
"align" => "center"
],
// EMPRESA
[
"type" => "text",
"value" => "EMPRESA MODELO LTDA",
"align" => "center",
"bold" => true,
"width" => 2,
"height" => 2
],
[
"type"=>"text",
"value"=>"CNPJ: 12.345.678/0001-99",
"align"=>"center"
],
[
"type"=>"text",
"value"=>"IE: 123.456.789.000",
"align"=>"center"
],
[
"type"=>"text",
"value"=>"Rua das Flores, 123",
"align"=>"center"
],
[
"type"=>"text",
"value"=>"Centro - Cidade/UF",
"align"=>"center"
],
[
"type"=>"text",
"value"=>"Fone: (11) 3333-4444",
"align"=>"center"
],
[
"type"=>"text",
"value"=>"================================"
],
// TITULO
[
"type"=>"text",
"value"=>"DOCUMENTO AUXILIAR DE VENDA",
"align"=>"center",
"bold"=>true,
"width"=>2,
"height"=>2
],
[
"type"=>"text",
"value"=>"DVA Nº 000012548",
"align"=>"center"
],
[
"type"=>"text",
"value"=>"================================"
],
// DADOS
[
"type"=>"text",
"value"=>"Cliente : JOÃO DA SILVA"
],
[
"type"=>"text",
"value"=>"CPF : 123.456.789-00"
],
[
"type"=>"text",
"value"=>"Telefone: (11)99999-9999"
],
[
"type"=>"text",
"value"=>"Vendedor: MARCOS OLIVEIRA"
],
[
"type"=>"text",
"value"=>"Data : 30/06/2026 14:58"
],
[
"type"=>"text",
"value"=>"Caixa : 001"
],
[
"type"=>"text",
"value"=>"================================"
],
// CABEÇALHO PRODUTOS
[
"type"=>"text",
"value"=>"ITEM DESCRIÇÃO"
],
[
"type"=>"text",
"value"=>" QTD X VL.UNIT = TOTAL"
],
[
"type"=>"text",
"value"=>"--------------------------------"
],
// PRODUTOS
[
"type"=>"text",
"value"=>"001 Arroz Tipo 1 5Kg"
],
[
"type"=>"text",
"value"=>" 2 x 28,90 = 57,80"
],
[
"type"=>"text",
"value"=>"002 Feijão Carioca 1Kg"
],
[
"type"=>"text",
"value"=>" 3 x 9,90 = 29,70"
],
[
"type"=>"text",
"value"=>"003 Açúcar Cristal 5Kg"
],
[
"type"=>"text",
"value"=>" 1 x 24,50 = 24,50"
],
[
"type"=>"text",
"value"=>"004 Café Torrado 500g"
],
[
"type"=>"text",
"value"=>" 4 x 17,80 = 71,20"
],
[
"type"=>"text",
"value"=>"005 Óleo de Soja"
],
[
"type"=>"text",
"value"=>" 6 x 8,50 = 51,00"
],
[
"type"=>"text",
"value"=>"006 Refrigerante 2L"
],
[
"type"=>"text",
"value"=>" 2 x 9,99 = 19,98"
],
[
"type"=>"text",
"value"=>"--------------------------------"
],
// TOTAIS
[
"type"=>"text",
"value"=>"Subtotal............. R$ 254,18",
"bold"=>true
],
[
"type"=>"text",
"value"=>"Desconto............. R$ 14,18"
],
[
"type"=>"text",
"value"=>"Frete................ R$ 10,00"
],
[
"type"=>"text",
"value"=>"================================"
],
[
"type"=>"text",
"value"=>"TOTAL DA VENDA",
"align"=>"center",
"bold"=>true
],
[
"type"=>"text",
"value"=>"R$ 250,00",
"align"=>"center",
"bold"=>true,
"width"=>3,
"height"=>3
],
[
"type"=>"text",
"value"=>"================================"
],
// PAGAMENTO
[
"type"=>"text",
"value"=>"FORMA DE PAGAMENTO",
"bold"=>true
],
[
"type"=>"text",
"value"=>"PIX..............R$ 150,00"
],
[
"type"=>"text",
"value"=>"CARTÃO CRÉDITO...R$ 100,00"
],
[
"type"=>"text",
"value"=>"Troco............R$ 0,00"
],
[
"type"=>"text",
"value"=>"================================"
],
// OBSERVAÇÃO
[
"type"=>"text",
"value"=>"OBSERVAÇÕES",
"bold"=>true
],
[
"type"=>"text",
"value"=>"Mercadoria conferida pelo cliente."
],
[
"type"=>"text",
"value"=>"Não aceitamos devolução sem cupom."
],
[
"type"=>"text",
"value"=>"Garantia conforme fabricante."
],
[
"type"=>"text",
"value"=>"================================"
],
// BARCODE
[
"type"=>"barcode",
"value"=>"000012548",
"barcodeType"=>"CODE128"
],
[
"type"=>"text",
"value"=>"Pedido Nº 000012548",
"align"=>"center"
],
[
"type"=>"text",
"value"=>"================================"
],
// QR CODE
[
"type"=>"text",
"value"=>"Consulte seu pedido",
"align"=>"center"
],
[
"type"=>"qrcode",
"value"=>"https://aggmlux.org/pedido/12548",
"size"=>6
],
[
"type"=>"text",
"value"=>"https://aggmlux.org",
"align"=>"center"
],
[
"type"=>"text",
"value"=>"================================"
],
// RODAPÉ
[
"type"=>"text",
"value"=>"OBRIGADO PELA PREFERÊNCIA!",
"align"=>"center",
"bold"=>true,
"width"=>2,
"height"=>2
],
[
"type"=>"text",
"value"=>"Volte Sempre",
"align"=>"center"
],
[
"type"=>"text",
"value"=>"Documento sem valor fiscal",
"align"=>"center"
],
[
"type"=>"feed",
"lines"=>4
],
[
"type"=>"cut"
]
]
];
$json = json_encode($dados, JSON_UNESCAPED_UNICODE);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $json,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Content-Length: ".strlen($json)
],
CURLOPT_RETURNTRANSFER => true
]);
$resposta = curl_exec($ch);
if(curl_errno($ch)){
die(curl_error($ch));
}
curl_close($ch);
echo "<pre>";
echo $resposta;
echo "</pre>";
?>