Skip to content

fix(NFCe): altera cálculo do tamanho da página única para utilizar UnlimitedHeight invés de calcular o tamanho de cada componente#1707

Merged
Valmir-Cunha merged 2 commits into
masterfrom
Branch_29632
Jul 16, 2026
Merged

fix(NFCe): altera cálculo do tamanho da página única para utilizar UnlimitedHeight invés de calcular o tamanho de cada componente#1707
Valmir-Cunha merged 2 commits into
masterfrom
Branch_29632

Conversation

@Valmir-Cunha

Copy link
Copy Markdown
Member

Alterado o cálculo do tamanho da página única para utilizar UnlimitedHeight em vez de somar o tamanho de cada componente. Isso evita erros de cálculo causados por propriedades como CanGrow e CanShrink, que podem alterar o tamanho do conteúdo depois que a página já foi dimensionada, cortando e sobrepondo informações quando configurado para imprimir em página única.

Com UnlimitedHeight, o tamanho da página é definido pelo próprio motor do relatório ao final da geração: exatamente a altura do conteúdo já renderizado (com CanGrow/CanShrink aplicados), mais as margens superior e inferior.

Fonte: How to use “UnlimitedHeight” and “UnlimitedWidth” properties of a report page

…limitedHeight invés de calcular o tamanho de cada componente
AgnaldoSilva0

This comment was marked as resolved.

Comment thread NFe.Danfe.Base/NFCe/NFCe.frx
Comment thread NFe.Danfe.Base/NFCe/NFCe.frx
@Valmir-Cunha

Copy link
Copy Markdown
Member Author

Problema

No modo de impressão em página única do DANFE NFC-e, o final do cupom (QR Code, protocolo e rodapé) saía cortado. Nesse modo, o script do relatório soma a altura de todas as bandas impressas para definir a altura da página.

Investigação

  1. Bandas fora da soma: algumas bandas impressas não entravam no cálculo (desconto total, troco, mensagem da SEFAZ, rodapé e formas de pagamento adicionais). Incluí-las reduziu o corte, mas não o eliminou.
  2. Altura negativa em bandas CanShrink: quando a altura calculada da página fica menor que o Top de design das últimas bandas, o engine recorta a altura dessas bandas para alturaDaPágina − TopDeDesign, gerando valores negativos que desmontam o fim do cupom.
  3. UnlimitedHeight avaliado e descartado: produz o mesmo resultado apenas no Preview; na impressão física o comportamento não muda.
  4. Corte persistente na impressão/PDF de cupons grandes: mesmo com o Preview correto, a impressão física continuava cortada quando a página ultrapassava a altura de uma folha A4, independentemente da impressora. O mesmo comportamento foi reproduzido com a versão em produção, sem nenhuma modificação no relatório — ou seja, não se trata de regressão.

Causa da limitação na impressão

O spooler do Windows trabalha com tipos de papel de dimensões fixas: não existe tipo de papel de 70/80mm com altura ilimitada, e o formato de impressão não foi projetado para papel contínuo — página maior que o limite do tipo de papel tem o excedente descartado na impressão. Papel contínuo real só é possível com impressão direta em linguagem de impressora (ESC/POS), fora do escopo deste relatório.

Historicamente, o modo "página única" foi criado para impressoras térmicas antigas que só faziam corte automático no fim da página. Impressoras atuais permitem corte no fim do documento, o que torna o modo desnecessário na maioria dos cenários.

Solução adotada e limitação conhecida

  • Soma completa das bandas: todas as bandas impressas passaram a ser consideradas no cálculo da altura da página (incluindo desconto, troco, mensagem da SEFAZ, rodapé e múltiplas formas de pagamento).
  • Compactação do Top de design em runtime: no modo página única, o Top das bandas é zerado antes da montagem (preservando a ordem relativa), eliminando o recorte negativo das bandas CanShrink — a posição real de impressão vem do fluxo das bandas, não do Top de design.
  • Com isso, o corte do QR Code/rodapé em cupons pequenos foi corrigido.
  • Para cupons cuja altura ultrapassa o limite do tipo de papel do driver (~A4), o corte na impressão é limitação da plataforma de impressão do Windows, já presente nas versões anteriores.
  • O modo de impressão em página única foi mantido por não ser possível confirmar se ainda existem clientes com impressoras antigas que dependam dele; recomenda-se seu uso apenas para cupons pequenos.

@Valmir-Cunha
Valmir-Cunha merged commit c69c511 into master Jul 16, 2026
@Valmir-Cunha
Valmir-Cunha deleted the Branch_29632 branch July 16, 2026 12:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants