Cartazes Promocionais e Modelos HTML de Produto
No RuB, cartazes promocionais, cartazetes de gôndola e splashes de preço em folhas de dimensões gráficas (como A4 ou A5) são gerenciados e emitidos diretamente como Modelos de Etiqueta (ModeloEtiqueta).
Essa arquitetura unificada permite que a loja utilize a mesma esteira de precificação, atalhos de coletores móveis, regras de negócio e permissões de usuários tanto para pequenas etiquetas térmicas adesivas de gôndola (ZPL) quanto para grandes cartazes visuais de oferta em PDF/HTML.
1. Como Funciona o Cartaz como Modelo de Etiqueta
O RuB trata os arquivos .html ou .htm como modelos gráficos de etiqueta de produto. O ciclo de execução é transparente:
graph LR
A[Template HTML em path.Etiqueta] --> B[Cadastro em ModeloEtiqueta]
C[Operador seleciona Modelo no Coletor/Web] --> D[IntfEtiquetaPrintWriter]
D --> E[Injeção de Variáveis do Produto]
E --> F[RuBHtmlReport / JasperReports]
F --> G[PDF Gerado / Impressora Gráfica]
Passo a Passo de Configuração:
- Criação do Template: Desenvolve-se o modelo em HTML5/CSS (com extensões Thymeleaf
th:if,th:text) definindo as dimensões via@page(ex:size: A4 portrait;ousize: A5 portrait;). - Armazenamento no Diretório: O arquivo (ex:
cartaz_oferta_a4.html) é copiado para a pasta configurada empath.Etiqueta(PluginEtiqueta.DIRETORIO_DE_ETIQUETAS). - Cadastro do Modelo no RuB: No cadastro de Modelos de Etiqueta (
ModeloEtiqueta), cadastra-se um novo registro apontando o campoPATH_ETQpara o nome do arquivo HTML (ex:cartaz_oferta_a4.html). - Emissão pelo Operador: Ao solicitar a impressão de etiquetas de produto pelo RuB Web ou pelo coletor móvel, o operador escolhe o modelo de cartaz desejado na lista suspensa de modelos.
- Renderização Vetorial: O RuB detecta a extensão
.html, carrega os dados cadastrais, promocionais e de embalagem do produto no mapa Jasper/Thymeleaf (toJasperMap) e aciona o motorRuBHtmlReportpara gerar o PDF vetorial.
2. Catálogo de Variáveis de Produto para Cartazes
Todas as variáveis de dados de produto e filiais são injetadas no contexto do template HTML via interpolação ${VARIAVEL}:
| Variável | Descrição | Exemplo de Saída |
|---|---|---|
${DESCPRODUTO} | Descrição comercial ou cadeia do produto. | SABÃO EM PÓ BRILHO TOTAL 1KG |
${SKU} ou ${CODIGO} | Código interno / SKU do produto no ERP. | 102030 |
${COD_PRECO} | Código da tabela de preço aplicada. | 1 |
${PRECO} | Preço de venda atual formatado com separador monetário. | 24,90 |
${PRECO_DE} | Preço regular anterior (preenchido se o item estiver em promoção). | 29,90 |
${PRECO_PROMOCIONAL} | Preço promocional vigente. | 24,90 |
${EMB_1O_VALUE} | Preço unitário da 1ª menor embalagem de venda. | 24,90 |
${EMB_1O_DESC} | Descrição da unidade da 1ª embalagem (ex: UN, KG, CX). | UN |
${EMB_1O_CODIGO_1} | Código de barras principal (EAN-13 / DUN-14). | 7891000123456 |
${EMB_2O_VALUE} | Preço por unidade na 2ª embalagem (atacado/volume). | 21,90 |
${EMB_2O_QTD} | Quantidade de unidades que compõem a 2ª embalagem. | 6 |
${EMB_2O_TOTAL} | Preço total da 2ª embalagem fechada. | 131,40 |
${EMB_2O_DESC} | Descrição da 2ª embalagem (ex: CX, FARDO). | CX |
${FORNECEDOR_NOME} | Razão social ou nome fantasia do fornecedor cadastrado. | INDÚSTRIA QUÍMICA NACIONAL S.A. |
${PROP_MARCA} | Propriedade dinâmica extra (ex: Marca do produto). | BRILHO TOTAL |
${LOJA} | Nome fantasia da filial emissora. | HIPERMERCADO CENTRAL |
${ID_LOJA} | Identificador numérico da loja convertido para ERP. | 101 |
${DT_ATUAL} | Data corrente da emissão no formato dd/MM/yyyy. | 24/08/2026 |
${DTH_ATUAL} | Data e hora completas da emissão. | 24/08/2026 18:30:00 |
3. Exemplos de Modelos de Cartazes
Exemplo 1: Cartaz Promocional A4 Splash de Oferta (DE / POR)
Template ideal para ilhas promocionais, pontas de gôndola e vitrines:
Código HTML (cartaz_oferta_a4.html):
<!DOCTYPE html>
<html lang="pt-BR" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<style>
@page {
size: A4 portrait;
margin: 15mm;
}
* {
box-sizing: border-box;
font-family: 'Arial Black', Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
}
body {
background-color: #ffffff;
color: #111111;
text-align: center;
}
.container {
border: 6px solid #cc0000;
border-radius: 12px;
padding: 20px;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.badge-oferta {
background-color: #cc0000;
color: #ffffff;
font-size: 28pt;
font-weight: 900;
padding: 10px 20px;
border-radius: 8px;
display: inline-block;
letter-spacing: 2px;
text-transform: uppercase;
}
.descricao-produto {
font-size: 26pt;
font-weight: bold;
color: #222222;
margin-top: 25px;
line-height: 1.2;
min-height: 70px;
}
.meta-produto {
font-family: Arial, sans-serif;
font-size: 13pt;
color: #555555;
margin-top: 10px;
}
.bloco-preco {
margin-top: 30px;
background: #fff8e7;
border: 3px dashed #e6a100;
border-radius: 10px;
padding: 25px 15px;
}
.preco-de {
font-size: 18pt;
color: #777777;
text-decoration: line-through;
font-family: Arial, sans-serif;
}
.preco-por-container {
display: flex;
justify-content: center;
align-items: baseline;
margin-top: 10px;
color: #cc0000;
}
.simbolo-cifrao {
font-size: 40pt;
margin-right: 5px;
}
.preco-principal {
font-size: 90pt;
font-weight: 900;
line-height: 0.9;
}
.unidade-venda {
font-size: 20pt;
color: #333333;
margin-left: 8px;
font-family: Arial, sans-serif;
}
.rodape-cartaz {
border-top: 2px solid #dddddd;
padding-top: 15px;
display: flex;
justify-content: space-between;
font-family: Arial, sans-serif;
font-size: 11pt;
color: #666666;
}
</style>
</head>
<body>
<div class="container">
<div>
<div class="badge-oferta">OFERTA ESPECIAL</div>
<div class="descricao-produto">${DESCPRODUTO}</div>
<div class="meta-produto">Cód: ${SKU} | Cód. Barras: ${EMB_1O_CODIGO_1}</div>
</div>
<div class="bloco-preco">
<div class="preco-de" th:if="${PRECO_DE != null and PRECO_DE != ''}">DE: R$ ${PRECO_DE}</div>
<div class="preco-por-container">
<span class="simbolo-cifrao">R$</span>
<span class="preco-principal">${PRECO}</span>
<span class="unidade-venda">/${EMB_1O_DESC}</span>
</div>
</div>
<div class="rodape-cartaz">
<div>Loja: ${LOJA} (ID: ${ID_LOJA})</div>
<div>Oferta válida enquanto durarem os estoques | Emitido em: ${DT_ATUAL}</div>
</div>
</div>
</body>
</html>
Protótipo Visual ASCII (A4):
+-------------------------------------------------------------+
| |
| [ OFERTA ESPECIAL ] |
| |
| SABÃO EM PÓ BRILHO TOTAL 1KG |
| Cód: 102030 | Cód. Barras: 7891000123456 |
| |
| + - - - - - - - - - - - - - - - - - - - - - - - - - -+ |
| | | |
| | DE: R$ 29,90 | |
| | | |
| | POR: R$ 24,90 / UN | |
| | | |
| + - - - - - - - - - - - - - - - - - - - - - - - - - -+ |
| |
| Loja: HIPERMERCADO CENTRAL (ID: 101) | Emitido: 24/08/2026|
+-------------------------------------------------------------+
Exemplo 2: Cartazete de Gôndola A5 com Preço de Atacarejo
Modelo A5 para sinalização de desconto progressivo por quantidade de compra (atacarejo):
Código HTML (cartaz_gondola_a5.html):
<!DOCTYPE html>
<html lang="pt-BR" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<style>
@page {
size: A5 portrait;
margin: 10mm;
}
* {
box-sizing: border-box;
font-family: Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
}
body {
background-color: #ffffff;
color: #222222;
}
.header {
background-color: #003366;
color: #ffffff;
padding: 10px;
text-align: center;
font-weight: bold;
font-size: 16pt;
border-radius: 6px 6px 0 0;
}
.card {
border: 2px solid #003366;
border-radius: 6px;
padding: 15px;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.titulo {
font-size: 18pt;
font-weight: 900;
text-align: center;
margin-top: 10px;
}
.box-varejo {
margin-top: 15px;
text-align: center;
border-bottom: 2px dashed #cccccc;
padding-bottom: 15px;
}
.label-varejo {
font-size: 12pt;
color: #666666;
}
.preco-varejo {
font-size: 36pt;
font-weight: bold;
color: #003366;
}
.box-atacado {
margin-top: 15px;
background-color: #e6f0fa;
border: 2px solid #0055aa;
border-radius: 8px;
padding: 12px;
text-align: center;
}
.label-atacado {
font-size: 13pt;
font-weight: bold;
color: #0055aa;
}
.preco-atacado {
font-size: 42pt;
font-weight: 900;
color: #cc0000;
}
.detalhe-atacado {
font-size: 11pt;
color: #444444;
margin-top: 4px;
}
.footer {
font-size: 9pt;
color: #777777;
text-align: center;
margin-top: 10px;
}
</style>
</head>
<body>
<div class="card">
<div>
<div class="header">PREÇO ESPECIAL DE GÔNDOLA</div>
<div class="titulo">${DESCPRODUTO}</div>
</div>
<div class="box-varejo">
<div class="label-varejo">PREÇO VAREJO (1 A ${EMB_2O_QTD} UNIDADES)</div>
<div class="preco-varejo">R$ ${PRECO}</div>
</div>
<div class="box-atacado" th:if="${EMB_2O_VALUE != null and EMB_2O_VALUE != ''}">
<div class="label-atacado">A PARTIR DE ${EMB_2O_QTD} UNIDADES (ATACADO)</div>
<div class="preco-atacado">R$ ${EMB_2O_VALUE} <span style="font-size: 16pt;">/UN</span></div>
<div class="detalhe-atacado">Caixa fechada com ${EMB_2O_QTD} unidades por R$ ${EMB_2O_TOTAL}</div>
</div>
<div class="footer">
SKU: ${SKU} | EAN: ${EMB_1O_CODIGO_1} | ${LOJA} | ${DT_ATUAL}
</div>
</div>
</body>
</html>
Protótipo Visual ASCII (A5):
+-----------------------------------------------------+
| PREÇO ESPECIAL DE GÔNDOLA |
| |
| BEBIDA ENERGÉTICA LATA 250ML |
| |
| PREÇO VAREJO (1 A 5 UNIDADES) |
| R$ 8,99 |
| - - - - - - - - - - - - - - - - - - - - - - - - - - |
| A PARTIR DE 6 UNIDADES (ATACADO) |
| R$ 6,99 /UN |
| Caixa com 6 unidades por R$ 41,94 |
| |
| SKU: 554433 | EAN: 7890001112223 | LOJA 101 | 24/08 |
+-----------------------------------------------------+