Como fazer quebra de página usando DOMPDF

9 respostas
mysqlphp
Mauricio_Dantas

Minha dúvida é seguinte gero um pdf (Relatório Geral) com dados do banco porém quero que quebre a página

para iniciar outro dados dessa forma:

Cabeçalho
Nome:Fulano
RG:123456
CPF:[CPF removido]
Rodapé

agora quebra página e inicia a mesma coisa só que outros dados do banco

Cabeçalho
Nome:Ciclano
RG:654321
CPF:[CPF removido]

e assim vai entende? pesquisei mas não achei nada com dompdf

Código PHP com DOMPDF

<?php	

include 'conexao.php';

$html = "";
$plantao="";
$space = " ";
$nome="<b>"."Nome:"."</b>";
$cpf="<b>"."CPF:"."</b>";
$crm="<b>"."CRM:"."</b>";    
$especialidades="<b>Especialidades:</b>";
    
$btn=@_POST['rw'];

$con = new mysqli($server, $user, $pass, $bd) or die (mysql_error());

$query = $con->query("SELECT codMedico, nomeMedico, sobreNomeMedico, cpfMedico, crmMedico, fotoMedico, inativo FROM tbMedico where inativo=1");
      while($reg = $query->fetch_array()) {
          $idMedico=$reg['codMedico'];
          
          $html.=$nome.$space.$nomeMedico=$reg['nomeMedico'].$space.$sobreNomeMedico=$reg['sobreNomeMedico']."<br/>";
          $html.=$cpf.$space.$cpfMedico=$reg['cpfMedico']."<br/>";
          $html.=$crm.$space.$crmMedico=$reg['crmMedico']."<br/><br/>";
          $html.="<u>".$especialidades."</u>";       
          
          $query1 = $con->query("SELECT * FROM tbEspecialidade
                                  inner join tbMedicoEspecialidade on tbEspecialidade.codEspecialidade = tbMedicoEspecialidade.codEspecialidade 
                                    where codMedico='$idMedico'");
            while($reg1 = $query1->fetch_array()) {
            
             $html.="<br>".$valorEspecialidade = $reg1['nomeEspecialidade'];
              
             } 
           //CONSULTA QUE TRAS OS PLANTOES FEITOS POR ESSE MEDICO
            $query2 = $con->query("SELECT codMedico, nomeEspecialidade, horaInicio, horaFim, data  FROM tbPlantao where codMedico='$idMedico'");
                
                $html.="<h2 style='text-align: left;'>Últimos plantões</h2>";
                $html.='<table border="1" style="text-align: center;">';
                    $html.='<thead>';
                        $html.='<tr>';
                          $html.='<th>Data do Plantão</th>';
                          $html.='<th>Especialidade(Dia)</th>';
                          $html.='<th>Hora de Entrada</th>';
                          $html.='<th>Hora de Saida</th>';
                         $html.='</tr>';
                     $html.='</thead>';
          
                    while($reg2=$query2->fetch_array()){
                         $html.='<tbody>';
                            $html.='<tr>';
                              $html.='<td>'.$reg2['data'].'</td>';
                              $html.='<td>'.$reg2['nomeEspecialidade'].'</td>';
                              $html.='<td>'.$reg2['horaInicio'].'</td>';
                              $html.='<td>'.$reg2['horaFim'].'</td>';
                            $html.='</tr>';
                          $html.='</tbody>';
                    }
            $html.='</table>';
            $html.="<br/>";
          $html.="<hr/><br/>";
      }
   
//referenciar o DomPDF com namespace
use Dompdf\Dompdf;

// include autoloader
require_once("dompdf/autoload.inc.php");
			
//Criando a Instancia
$dompdf = new DOMPDF();

// Carrega seu HTML
$dompdf->load_html('
        <img src="favicontcc.png" style="height:10%;width:10%;position:absolute;"></img>
        <img src="pala.png" style="height:15%;width:15%;position:absolute;top:4.5%;left:10%;"></img>
        <h1 style="text-align: right;">Relatório Geral - Médicos</h1>
        <div style="height:3%;width:100%;background-color:#7cb3d2;"></div>
        <h2><b>Todos o Médicos</b></h2>
        <p>'.$html.'</p>
');

//Renderizar o html
$dompdf->render();

//Exibibir a página
$dompdf->stream(
    "relatoriogeral_medicos.pdf", 
    array(
        "Attachment" => false //Para realizar o download somente alterar para true
         )
);

?>

9 Respostas

rodevops

Como vc usa html veja se com css vc consegue resolver…

Mauricio_Dantas

Vou dar uma olha e tentar, jaja trago o veredito kk
Att. Mauricio

Mauricio_Dantas

Infelizmente não funcionou mano, teria um exemplo ?

rodevops

Ja tentou no fim da table?

$html.="<hr/><br style='page-break-after: always;'/>";

Se não der certo coloque uma div no final…

$html.="<hr/><br/><div style='page-break-after: always;'></div>";
G

Você pode usar também style, para definir o que é cabeçalho, o corpo e o roda-pé.
Ai, cada vez que você gera a informação na respectiva DIV ele preenche e salta pagina automaticamente.
vou colocar um exemplo de stylo que sempre uso, funciona perfeitamente.

@page { margin: 120px 50px 80px 50px; } #head{ font-size: 20px; text-align: center; height: 130px; width: 100%; position: fixed; top: -130px; left: 0; right: 0; margin: auto; } #body{ width: 600px; position: relative; margin: auto; } #footer { position: fixed; bottom: 0; width: 100%; text-align: right; border-top: 1px solid gray; } #footer .page:after{ content: counter(page); }

basta criar as DIV com os nomes indicados.

Mauricio_Dantas

Grisolfi, Obrigado pela Resposta,você teria um exemplo com o laço rodando no seu arquivo que gerar as páginas/relatorio?

Mauricio_Dantas

@grisolfi perceba que não quebrou os dados

Código
<?php
date_default_timezone_set(‘America/Sao_Paulo’);

require_once("../crud/conexao.php");

require 'vendor/autoload.php';
require_once 'dompdf/autoload.inc.php';

$diaAtual = date ("d/m/Y");

$html = "";
$plantao="";
$space = " ";
$nome="<b>"."Nome:"."</b>";
$cpf="<b>"."CPF:"."</b>";
$crm="<b>"."CRM:"."</b>";    
$especialidades="<b>Especialidades:</b>";

$codHospital = @$_POST['codHospitalLogado'];

$con = new mysqli($server, $user, $pass, $bd) or die (mysql_error());
$query = $con->query("SELECT codMedico, nomeMedico, sobreNomeMedico, cpfMedico, crmMedico, fotoMedico, inativo FROM tbMedico where inativo=1 and codHospital=1");
$total = mysqli_num_rows($query);

      while($reg = $query->fetch_array()) {
          $idMedico=$reg['codMedico'];
          
          $html.=$nome.$space.$nomeMedico=$reg['nomeMedico'].$space.$sobreNomeMedico=$reg['sobreNomeMedico']."<br/>";
          $html.=$cpf.$space.$cpfMedico=$reg['cpfMedico']."<br/>";
          $html.=$crm.$space.$crmMedico=$reg['crmMedico']."<br/><br/>";
          $html.="<u>".$especialidades."</u>";       
          
          $query1 = $con->query("SELECT * FROM tbEspecialidade
                                  inner join tbMedicoEspecialidade on tbEspecialidade.codEspecialidade = tbMedicoEspecialidade.codEspecialidade 
                                    where codMedico='$idMedico'");
            while($reg1 = $query1->fetch_array()) {
            
             $html.="<br>".$valorEspecialidade = $reg1['nomeEspecialidade'];
              
             } 
           //CONSULTA QUE TRAS OS PLANTOES FEITOS POR ESSE MEDICO
            $query2 = $con->query("SELECT codMedico, nomeEspecialidade, horaInicio, horaFim, data  FROM tbPlantao where codMedico='$idMedico'");
                
                $html.="<h2 style='text-align: left;'>Últimos plantões</h2>";
                $html.='<table border="1" style="text-align: center;">';
                    $html.='<thead>';
                        $html.='<tr>';
                          $html.='<th>Data do Plantão</th>';
                          $html.='<th>Especialidade(Dia)</th>';
                          $html.='<th>Hora de Entrada</th>';
                          $html.='<th>Hora de Saida</th>';
                         $html.='</tr>';
                     $html.='</thead>';
          
                    while($reg2=$query2->fetch_array()){
                         $html.='<tbody>';
                            $html.='<tr>';
                              $html.='<td>'.$reg2['data'].'</td>';
                              $html.='<td>'.$reg2['nomeEspecialidade'].'</td>';
                              $html.='<td>'.$reg2['horaInicio'].'</td>';
                              $html.='<td>'.$reg2['horaFim'].'</td>';
                            $html.='</tr>';
                          $html.='</tbody>';
                    }
            $html.='</table>';
            $html.="<br/>";
          $html.="<hr/><br/>";
      }
   
 // reference the Dompdf namespace
 use Dompdf\Dompdf;

 // instantiate and use the dompdf class
 $dompdf = new Dompdf();



 if($total >0){
    $dompdf->loadHtml('
        <title>Relatório Geral - Usuários</title>
        <link rel="stylesheet" type="text/css" media="screen" href="../../../../../arquivos-js-css/assets/libs/lib-custom/css/bootstrap.min.css"/>
        <link rel="stylesheet" type="text/css" href="../../../../../arquivos-js-css/dist/css/style-custom.css"/>
           
        <div id="head">
            Começo
        </div>

        <div id="body">
           '.$html.'
        </div>

        <div id="footer">
            fim
        </div>
    ');}
// Render the HTML as PDF
 $dompdf->render();

 $dompdf->stream("relatorio_geral_medicos.pdf", array("Attachment" => false));
G

Bom eu uso CodeIgniter, então caso você não use Framework ou use outro diferente tera de fazer um pequeno esforço para entender e adptar ao seu caso.
Vamos lá:
Esta é a rotina que le os dados e para a que vai fazer a impressão propriamente dita;

// busca os dados a serem impressos

/*
public function ficha_imovel()
{
$id = $this-> uri-> segment(4); //aqui recebo o id pela url
$info = $this-> imoveis-> get_byid($id)-> row();

$dados = new stdClass();
	foreach ($info as $key =&gt;  $value) {
		$dados-&gt; $key = $value;
	} 		
	$this-&gt; load-&gt; view('home/modelo/ficha_imovel', $dados); 

	// Get output html
	$html = $this-&gt; output-&gt; get_output();

	// Load library
	$this-&gt; load-&gt; library('dompdf_gen');

	// Convert to PDF
	$this-&gt; dompdf-&gt; load_html($html);
	$this-&gt; dompdf-&gt; render();
	$this-&gt; dompdf-&gt; stream("ficha_imovel_" . $id . ".pdf");
}

//imprime os dados

if (!defined("BASEPATH")) exit("No direct script access allowed");
$style=’< html> < head>

< !–< meta http-equiv=“Content-Type” content=“text/html; charset=iso-8859-1”> -->

< meta charset=“utf-8”>

< style type=“text/css”>

<a class="mention" href="/u/page">@page</a> {

margin: 120px 50px 80px 50px;

}

#head{

font-size: 20px;

text-align: center;

height: 130px;

width: 100%;

position: fixed;

top: -130px;

left: 0;

right: 0;

margin: auto;

}

#body{

width: 600px;

position: relative;

margin: auto;

}

table{

border-collapse: collapse;

width: 100%;

position: relative;

}

td{

padding: 3px;

}

#footer {

position: fixed;

bottom: 0;

width: 100%;

text-align: right;

border-top: 1px solid gray;

}

#footer .page:after{

content: counter(page);

}

< /style> < /head> < body> ';
// dados do cliente
$ficha="";
$cliente="";
$assina="";
foreach ($data as $lin) {
    $cliente='&lt; br&gt; &lt; b&gt; Cliente:&lt; /b&gt;  '.$lin-&gt; nome.' &lt; b&gt; RG/CPF: &lt; /b&gt; '.$lin-&gt; cpf.' &lt; b&gt; Celular:&lt; /b&gt;  '.$lin-&gt; celular;
    $assina=$lin-&gt; nome.' &lt; br&gt; RG/CPF: '.$lin-&gt; cpf.
    $ficha= $lin-&gt; id;

}  

$fimp = $ficha;
while (strlen($fimp) &lt; = 4) {
    $fimp = '0'.$fimp;
}

// dados da imobiliaria
$logo="";
$imob=$this-&gt; imobiliaria-&gt; get_all()-&gt; result();
foreach ($imob as $lin) {
    $logo=$lin-&gt; logotipo;
}

       
//define o cabeçalho da página
$head='&lt; div id="head"&gt; 
        
        &lt; img src="'.base_url().'upload/'.$logo.'" height="40%" width="30%"&gt; 
        &lt; p&gt; Ficha de Visita - '.$fimp.' - Via do Cliente&lt; /p&gt; 
        &lt; /div&gt; 
       &lt; div id="corpo"&gt; ';

    
       
// dados corretor
$iduser = $this-&gt; session-&gt; userdata('user_id');
$corret=$this-&gt; usuario-&gt; get_byid($iduser)-&gt; result();
$corretor="";
foreach ($corret as $lin) {
    $corretor = '&lt; br&gt; &lt; b&gt; Corretor:&lt; /b&gt;  '.$lin-&gt; nome.' &lt; b&gt; CRECI-'.$lin-&gt; uf.'&lt; /b&gt;  '.$lin-&gt; creci.' &lt; b&gt; Celular:&lt; /b&gt;  '.$lin-&gt; celular.'&lt; br&gt; ';
}




//define o corpo do documento
$body='
    &lt; table border="1px"&gt; 
       &lt; !-- &lt; thead&gt; 
        &lt; tr bgcolor="#ccc"&gt; 
            &lt; td&gt; Quantidade&lt; /td&gt; 
            &lt; td&gt; Tipo&lt; /td&gt; 
            &lt; td&gt; Produto&lt; /td&gt; 
            &lt; td&gt; Obs.&lt; /td&gt; 
        &lt; /tr&gt; &lt; /thead&gt; --&gt; &lt; tbody&gt; ';

        foreach ($data as $lin) {
            $img = $this-&gt; arquivos-&gt; buscaImagemPrincipal($lin-&gt; IDIMOVEL);
            if (isset($img-&gt; origem)) {
                $imgCaminho = base_url().'upload/imagem/'. $img-&gt; origem .'/'.$img-&gt; arquivo;
            }
            else{
                $imgCaminho = base_url().'upload/semimagem.png';
            }
            

            $descImovel = 'Referência:&lt; b&gt;  '. $lin-&gt; referencia . ' - ' . $lin-&gt; timovel .' '. $lin-&gt; tipoImovel.' '.$lin-&gt; subtipoImovel .'&lt; /b&gt; &lt; br&gt; ';
            if ($lin-&gt; complemento!=""){
                $endereco = '&lt; br&gt; Endereço: ' . $lin-&gt; logradouro. ', '. $lin-&gt; numero.', '.$lin-&gt; complemento. ', '.$lin-&gt; bairro.', '.$lin-&gt; localidade.'-'.$lin-&gt; uf;
            }else{
                $endereco = '&lt; br&gt; Endereço: ' . $lin-&gt; logradouro. ', '. $lin-&gt; numero. ', '.$lin-&gt; bairro.', '.$lin-&gt; localidade.'-'.$lin-&gt; uf;
            }

            //IDcondominio
            $anoConstrucao="";
            if ($lin-&gt; anoConstrucao!=''){
                $anoConstrucao = '&lt; br&gt; Ano/Mes Construção:'.$lin-&gt; anoConstrucao .'/'.$lin-&gt; mesConstrucao;
            }
            $terreno="";
            if ($lin-&gt; terrenoFrente!=""){
         //       $terreno='Área Terreno: Frente:'.$lin-&gt; terrenoFrente." X Fundos:" . $terrenoFundos . "= Total:" .$areaTerreno . 'm²';
            }
            $valor='&lt; br&gt; &lt; h2&gt; Valor em R$: '. $lin-&gt; valorVenda .'&lt; /h2&gt; ';
            //, ,tituloAnuncio, 

            
            $itens=$this-&gt; imoveis-&gt; get_all_itens($lin-&gt; IDIMOVEL,0)-&gt; result();
            $listaItens="";
            foreach ($itens as $lin) {
                if ($lin-&gt; tipoItem&lt; =01){
                    $listaItens = $listaItens . ' ' .$lin-&gt; nomeItem .'('. $lin-&gt; quantidade .'), ';  
                }else{
                    $listaItens = $listaItens . ' ' .$lin-&gt; nomeItem .'(sim), ';  
                }               
            }

            

            $testo= $descImovel.$listaItens.$anoConstrucao.$terreno.$endereco;
            $tmp='&lt; tr&gt; 
            &lt; td width="20%"&gt; '.'&lt; img src="'.$imgCaminho.'"  height="180px" width="180px"&gt; '.'&lt; /td&gt; 
            &lt; td width="80%"&gt; '.$testo.'&lt; /td&gt; ';
            $body = $body.$tmp;
        }  

        $body = $body.'&lt; /tbody&gt; 
        &lt; /table&gt; 
         &lt; div&gt; &lt; br&gt; &lt; p align="justify"&gt; '
        .'Eu, cliente qualificado a cima, declaro para os devidos fins que não visitei os imóveis descritos nesta ficha de visita em data anterior a esta. Os valores acima expressos em Reais podem sofrer alterações sem aviso prévio por parte do proprietário deste imóvel. Conforme preceitua o capitulo XIII do Código Civil Brasileiro, o qual determina que  a  remuneração  do corretor é devida, uma vez que tenha conseguido resultado no contrato de mediação, apresentação de cliente a proprietário do imóvel, apresentação de cliente a imóvel, ainda que este não se efetive  em  virtude de arrependimento das partes, sendo assim devida a comissão a intermediadora.    '
        .'&lt; /p&gt; &lt; /div&gt; ';

        


        
        foreach ($imob as $lin) {

            $body = $body.'&lt; br&gt; &lt; p align="right"&gt; '.$lin-&gt; localidade.', '.$lin-&gt; uf.', '. date("d/m/Y") .'&lt; /p&gt; ';                
            $body = $body.'&lt; div&gt; &lt; br&gt; &lt; br&gt; '
            . '&lt; table align="center"&gt; '
            .'&lt; tr&gt; '
            .'&lt; td&gt; __________________________________&lt; /td&gt; '
            .'&lt; td&gt; __________________________________&lt; /td&gt; '
            .'&lt; /tr&gt; '
            .'&lt; tr&gt; '
            .'&lt; td&gt; '.$lin-&gt; rsocial.'&lt; br&gt; CRECI'.$lin-&gt; creci.'&lt; /td&gt; '
            .'&lt; td&gt; '.$assina.'&lt; /td&gt; '
            .'&lt; /tr&gt; '
            .'&lt; /table&gt; '
            .'&lt; /div&gt; ';
             
        }


//define o rodapé da página
$footer='
    &lt; div id="footer"&gt; 
        &lt; p class="page"&gt;  Pagina: &lt; /p&gt; 
    &lt; /div&gt; &lt; /body&gt; &lt; /html&gt;   ';

//concatenando as variáveis
$html=$head.$style.$cliente.$corretor.$body.$footer;

echo $html;
G

Não tem propriamente um laço, você monta um que corresponda ao tamanho da pagina A4 por exemplo e apartir dai vai montando as informações em html, cada ves que este “espaço” do A4 for preenchido ele salta pagina.
Espero ter ajudado.

Criado 18 de outubro de 2018
Ultima resposta 2 de mai. de 2019
Respostas 9
Participantes 3