1
resposta

Relatorio html, css, php

Bom preciso fazer um relatorio simples para impressão mas estou tendo problemas com a numeração das paginas por exemplo gera 4 paginas mas meu codigo e numera so 3 paginas e mesmo assim tudo errado

foreach ($dados as $linha) {
    if ($linhaAtual >= $linhasPorPagina) {
        $html .= '</tbody><tbody class="page-break"><tr><td colspan="3" style="text-align: center;">Página ' . $paginaAtual++ . '
        </td></tr><tr><th>Nome</th><th>Cidade</th><th>Idade</th></tr>';
        $linhaAtual = 0;
    }
    $html .= '<tr>';
    foreach ($linha as $valor) {
        $html .= '<td>' . $valor . '</td>';
    }
    $html .= '</tr>';
    $linhaAtual++;
}

utilizo isso para fazer o controle mas nao esta dando certo

meu pensamento era fazer um relatorio tipo assim o Insira aqui a descrição dessa imagem para ajudar na acessibilidade

e bem em baixo dele o numero da pagina que esta como esta na imagem

1 resposta

Oii, Adryan, como vai?

Você incrementa a variável $paginaAtual ao mesmo tempo em que a utiliza para exibir o número da página. É capaz que isso esteja causando a numeração incorreta. Recomendo incrementar essa variável logo após usá-la para exibir o número da página, garantindo assim que o número exibido seja o ideal antes de incrementar para a próxima página.

Como sugestão, vou deixar o código abaixo:

$paginaAtual = 1; // Inicializa a variável de controle de página
foreach ($dados as $linha) {
    if ($linhaAtual >= $linhasPorPagina) {
        $html .= '</tbody><tbody class="page-break"><tr><td colspan="3" style="text-align: center;">Página ' . $paginaAtual . '
        </td></tr><tr><th>Nome</th><th>Cidade</th><th>Idade</th></tr>';
        $linhaAtual = 0;
        $paginaAtual++; // Incrementa depois de usar o número da página
    }
    $html .= '<tr>';
    foreach ($linha as $valor) {
        $html .= '<td>' . $valor . '</td>';
    }
    $html .= '</tr>';
    $linhaAtual++;
}

Além disso, para que o número da página seja exibido do jeito certo no rodapé de cada página, como você desenhou, o CSS .page-break precisar estar configurado para criar uma nova página a cada quebra.

Por exemplo, no CSS poderia ser assim:

.page-break {
    page-break-before: always;
}

Lembrando que como o projeto é à parte, as sugestões que estou dando acima podem não ser tão cirúrgicas, tá bem?

Se outra dúvida surgir, estamos disponíveis.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software