From 69f37c02a81a2e749c98b5441ef2731cf5c9e378 Mon Sep 17 00:00:00 2001 From: Marcos Reifonas Date: Thu, 10 Sep 2026 13:29:10 +0000 Subject: [PATCH] fix: layout de impressao identico ao preview, eliminando quebra involuntaria no cabecalho --- .../prioridades/PrioridadesPDFTemplate.tsx | 33 +++- src/pages/PrioridadesFabricacao.tsx | 28 ++-- src/utils/pdfGenerator.ts | 155 +++--------------- 3 files changed, 62 insertions(+), 154 deletions(-) diff --git a/src/components/prioridades/PrioridadesPDFTemplate.tsx b/src/components/prioridades/PrioridadesPDFTemplate.tsx index dd83464..2a91c48 100644 --- a/src/components/prioridades/PrioridadesPDFTemplate.tsx +++ b/src/components/prioridades/PrioridadesPDFTemplate.tsx @@ -171,17 +171,34 @@ export const PrioridadesPDFTemplate: React.FC = ({ height: 18px; line-height: 14px; } + @page { + size: A4 portrait; + margin: 8mm 10mm 8mm 10mm; + } @media print { body { - font-size: 9px; + font-size: 9.5px; + -webkit-print-color-adjust: exact !important; + print-color-adjust: exact !important; } - .page-break { - page-break-before: always; + .checklist-container { + width: 100% !important; + max-width: 100% !important; + } + .priority-group { + break-inside: auto; + page-break-inside: auto; } h2 { + break-after: avoid; page-break-after: avoid; } + .item-row { + break-inside: avoid; + page-break-inside: avoid; + } .item-card { + break-inside: avoid; page-break-inside: avoid; } } @@ -206,7 +223,7 @@ export const PrioridadesPDFTemplate: React.FC = ({ {/* Informações da OF e Fase */}
-
+
{/* Coluna OF */}

Ordem de Fabricação (OF)

@@ -218,7 +235,7 @@ export const PrioridadesPDFTemplate: React.FC = ({

{etapaFase}

{/* Coluna Processo */} -
+

PROCESSO

{['Corte', 'Solda', 'Pintura', 'Expedição'].map((processo) => ( @@ -270,12 +287,12 @@ export const PrioridadesPDFTemplate: React.FC = ({ {/* Itens por Prioridade */}
- {['P1', 'P2', 'P3', 'P4'].map((codigo, priorityIndex) => { + {['P1', 'P2', 'P3', 'P4'].map((codigo) => { const itens = itensPorPrioridade[codigo] || []; if (itens.length === 0) return null; return ( -
0 ? 'page-break' : ''}> +

{getPrioridadeNome(codigo)}

@@ -286,7 +303,7 @@ export const PrioridadesPDFTemplate: React.FC = ({ const rowItems = itens.slice(i * 3, (i + 1) * 3); return ( -
+
{rowItems.map((item) => { const quantidade = item.quantidade_priorizada; const marca = item.peca?.marca || 'N/A'; diff --git a/src/pages/PrioridadesFabricacao.tsx b/src/pages/PrioridadesFabricacao.tsx index 2927413..2b2a851 100644 --- a/src/pages/PrioridadesFabricacao.tsx +++ b/src/pages/PrioridadesFabricacao.tsx @@ -176,11 +176,8 @@ const PrioridadesFabricacao = () => { } }; - // Adicionar classe page-break para P2, P3 e P4 - const pageBreakClass = priorityIndex > 0 ? 'page-break' : ''; - itemsContent += ` -
+

${getPrioridadeNome(codigo)}

@@ -192,7 +189,7 @@ const PrioridadesFabricacao = () => { const bgColorClass = i % 2 !== 0 ? 'bg-gray-50/70' : 'bg-white'; const rowItems = itens.slice(i * 3, (i + 1) * 3); - itemsContent += `
`; + itemsContent += `
`; rowItems.forEach((item) => { const quantidade = item.quantidade_priorizada; @@ -266,17 +263,28 @@ const PrioridadesFabricacao = () => { height: 18px; line-height: 14px; } + @page { + size: A4 portrait; + margin: 8mm 10mm 8mm 10mm; + } @media print { body { - font-size: 9px; + font-size: 9.5px; } - .page-break { - page-break-before: always; + .priority-group { + break-inside: auto; + page-break-inside: auto; } h2 { + break-after: avoid; page-break-after: avoid; } + .item-row { + break-inside: avoid; + page-break-inside: avoid; + } .item-card { + break-inside: avoid; page-break-inside: avoid; } } @@ -299,7 +307,7 @@ const PrioridadesFabricacao = () => {
-
+

Ordem de Fabricação (OF)

@@ -311,7 +319,7 @@ const PrioridadesFabricacao = () => {

${faseSelecionada}

-
+

PROCESSO

diff --git a/src/utils/pdfGenerator.ts b/src/utils/pdfGenerator.ts index 8cd652b..9320c62 100644 --- a/src/utils/pdfGenerator.ts +++ b/src/utils/pdfGenerator.ts @@ -214,27 +214,25 @@ export const printProfessionalPDF = async (elementId: string) => { console.warn('Não foi possível obter alguns estilos', e); } - // HTML otimizado para impressão sem áreas vazias + // HTML otimizado para impressão idêntica à visualização const printContent = ` - Relatório de Produção + Checklist de Produção + - + ${element.outerHTML}