Jump to content
Sapinn

Problemas ao usar php para gerar pdf

Recommended Posts

Salve! Dúvida cruel que eu preciso resolver para o meu projeto. Foi requerido que eu permitisse que as redações feitas no meu projeto fossem mostradas em arquivos pdf para download e para impressão já consigo gerar tal arquivo o único problema é que nas correções que também poderão ser impressas eu mostro os erros de um forma para que eles vejam destacado. Tudo isso funciona, o único problema é que tá dando umas quebras de página no pdf. Muito mais muito provavelmente seja por causa do vetor ou seja a forma que eu esteja chamando o mesmo .

Vejam meu codigo:

<?php 
//inclui o mpdf
 include("mpdf60/mpdf.php");
//essa função verifica dois textos para verem se eles são iguais
 function get_str_difs($str1, $str2) {
   $first = explode(" ", $str1);
   $second = explode(" ", $str2);
   $arrDif1 = array_diff($first,$second);
   $arrDif2 = array_diff($second,$first);
   $old = '';
   $new = '';
     foreach($first as $word) {
       if(in_array($word,$arrDif1)) {
         //aqui ele marca o que for diferente
       $old .= "<span style='color: red; background-color:#dedede;'>" . $word . "</span> ";
       continue;
       }
       $old .= $word . " ";
     }
     foreach($first as $word) {
       if(in_array($word,$arrDif1)) {
           //aqui ele marca o que for diferente
       $new .= "<span style='color: green;background-color:#dedede;'> " . $word . " </span>";
       continue;
       }
 
       $new .= $word . " ";
     }
   return array('old' => $old, 'new' => $new);
   }
   //esses são dois textos usado como exemplo de uma redação
 $str1 = '
 Em virtude do contexto histórico, é visível que o desmatamento em excesso no Brasil é um desafio que já vem sendo enfrentado há muito tempo, porém, ainda existem bastante casos que afetam gravemente, colocando em desequilíbrio todo o sistema natural. 
 É fundamental avaliar o corte das árvores de grande porte na floresta Amazônica, principalmente para a criação de gado bovino e derivados da madeira extraída. O espaço preenchido e o material retirado são pontos fundamentais para os grandes fazendeiros e as indústrias em meios econômicos. 
 As queimadas são usadas para limpar áreas, muitas vezes acabam saindo de controle, gerando os incêndios florestais. Elas destroem regiões propícias à vida animal, tornando o lugar inabitável. Segundo o G1, do dia 1 de janeiro até 11 de setembro do ano passado, foi registrado um aumento de 43% das queimas. 
 O desmatamento ilegal esta presente e intenso. Muitas vezes, por se tratar de uma grande região de floresta, se torna difícil identificar e punir os infratores, que acabam desmatando uma taxa a mais que a recomendada. 
 Portanto, é preciso de uma atenção maior por parte do governo, punindo severamente os que exercem o desmatamento ilegal, além de recrutar mais soldados para vigiarem a área florestal. As indústrias desenvolverem novos materiais para servirem como matérias-primas dos seus produtos, como os recicláveis. É importante as ONGS fazerem movimentos, sejam palestras ou campanhas de conscientização da população.
 ';
 $str2 = '     
 Em virtude do contexto histórico, é visível que o desmatamento em excesso no Brasil é um desafio que já vem sendo enfrentado há muito tempo, porém, ainda existem bastante casos que afetam gravemente, colocando em desequilíbrio todo o sistema natural. 
 É fundamental avaliar o corte das árvores de grande porte na floresta Amazônica, principalmente para a criação de gado bovino e derivados da madeira extraída. O espaço preenchido e o material retirado são pontos fundamentais para os grandes fazendeiros e as indústrias em meios econômicos. 
 As queimadas são usadas para limpar áreas, muitas vezes acabam saindo de controle, gerando os incêndios florestais. Elas destroem regiões propícias à vida animal, tornando o lugar inabitável. Segundo o G1, do dia 1 de janeiro até 11 de setembro do ano passado, foi registrado um aumento de 43% das queimas. 
 O desmatamento ilegal está presente e intenso. Muitas vezes, por se tratar de uma grande região de floresta, se torna difícil identificar e punir os infratores, que acabam desmatando uma taxa a mais que a recomendada. 
 Portanto, é preciso de uma atenção maior por parte do governo, punindo severamente os que exercem o desmatamento ilegal, além de recrutar mais soldados para vigiarem a área florestal. As indústrias desenvolverem novos materiais para servirem como matérias-primas dos seus produtos, como os recicláveis. É importante as ONGS fazerem movimentos, sejam palestras ou campanhas de conscientização da população.
 ';
   $difs = get_str_difs($str1, $str2);
   //Algumas variaveis criadas para o exemplo
   $nome = 'Fulano';
   $nota = '950,00';
 $html = "
<h1>CORREÇÃO</h1>
 <h1>Tema: O DESMATAMENTO COMO PROBLEMA NO BRASIL</h1>
               <div> 
                   <img src='aluno.jpg' width='80px' height='80px' class='img'>
               </div>
               <div>
                <h3>Feito por: $nome/NOTA: $nota</h3>
                <p style='font-size:12px;'><i>Aluno do 3° ano A /  Manhã </i></p>
               </div>
<textarea class='notebook'>
".$difs['new']."
</textarea>
    <footer>
        <p><b>&copy;Minha Redação Nota Mil </b></p>
    </footer>
 " ;
  $mpdf=new mPDF(); 
 $mpdf->SetDisplayMode('fullpage');
 $css = file_get_contents("css/estilo.css");
 //imprime no pdf as informações.
 $mpdf->WriteHTML($css,1);
 $mpdf->WriteHTML($html);
 $mpdf->Output();

 exit;
 ?>
Spoiler

 

 

Vou deixar aqui as imagens de como está fincando o pdf com as quebras de páginas. Alguma ideia de como arrumar

 

1a.png

2a.png

Share this post


Link to post
Share on other sites

Olá, amigo.

 

saudações...

 

Verificando seu código acima que postou, não encontrei essa função:  $mpdf->AddPage();

 

Observação: todo o $mpdf->writeHtml() que você mandar depois do $mpdf->AddPage() vai para a página nova

 

Cesar

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By rvamecca
      Eu tenho um servidor que roda os PHP da versão 5.6 até a 8.0 com vários sites. Utilizo a versão FPM só que pesquisei na internet inteira e não consegui fazer rodar os arquivos customizados php.ini/.user.ini nos diretórios dos domínios. Chequei via phpinfo() e não carrega o arquivo customizado de configuração.
       
      Alguém pode me dar um help?
       
      Servidor Ubuntu 18.04 com Apache e as versões PHP 5.6, 7.0, 7.2, 7.4, 8.0 em FPM
    • By violin101
      Caros amigos, saudações...
       
      Fiz várias pesquisa, mas não consegui entender como devo fazer corretamente.
       
      Tenho um Cadastro de Produto/Clientes/etc.
       
      Gostaria de após clicar no Button ADICIONAR ou GRAVAR, quero mostrar na tela a seguinte mensagem:
      msg:
      Aguarde Processando...
       
      obs.: em alguns sistema até parece uma MODAL, com barra de progresso.
       
      Para impedir que o usuário fica Clicando nos Buttons.
       
      Alguém poderia me auxiliar de como devo fazer isso ?
       
      Grato,
       
      Cesar
    • By alysson122010
      Galera estou começando a trabalhar com datatables porem tenho uma dificuldade pq tipo até 200 registros por pagina é aceitavel mas penso quando tiver 2000 registro carregar tudo numa pagina so da errado pq é muitos dados e pode travar tudo.
      Como posso fazer para listar com limite por pagina ou alguma maneira para poder colocar varios dados sem travar.
       
      estou usando assim:
      <script type="text/javascript">        $(document).ready(function() {             $('#example').DataTable({         "order": [[ 0, "desc" ]],         "language": {             "url": "//cdn.datatables.net/plug-ins/1.10.21/i18n/Portuguese-Brasil.json"         }     });         } );        </script> <table id="example" class="table table-striped table-bordered" style="width:100%">         <thead>             <tr>                 <th>Name</th>                 <th>Position</th>                 <th>Office</th>                 <th>Age</th>                 <th>Start date</th>                 <th>Salary</th>             </tr>         </thead>         <tbody>             <tr>                 <td>Tiger Nixon</td>                 <td>System Architect</td>                 <td>Edinburgh</td>                 <td>61</td>                 <td>2011/04/25</td>                 <td>$320,800</td>             </tr>             <tr>                 <td>Garrett Winters</td>                 <td>Accountant</td>                 <td>Tokyo</td>                 <td>63</td>                 <td>2011/07/25</td>                 <td>$170,750</td>             </tr>             <tr>                 <td>Ashton Cox</td>                 <td>Junior Technical Author</td>                 <td>San Francisco</td>                 <td>66</td>                 <td>2009/01/12</td>                 <td>$86,000</td>             </tr>             <tr>                 <td>Cedric Kelly</td>                 <td>Senior Javascript Developer</td>                 <td>Edinburgh</td>                 <td>22</td>                 <td>2012/03/29</td>                 <td>$433,060</td>             </tr>             <tr>                 <td>Airi Satou</td>                 <td>Accountant</td>                 <td>Tokyo</td>                 <td>33</td>                 <td>2008/11/28</td>                 <td>$162,700</td>             </tr>             <tr>                 <td>Brielle Williamson</td>                 <td>Integration Specialist</td>                 <td>New York</td>                 <td>61</td>                 <td>2012/12/02</td>                 <td>$372,000</td>             </tr>             <tr>                 <td>Herrod Chandler</td>                 <td>Sales Assistant</td>                 <td>San Francisco</td>                 <td>59</td>                 <td>2012/08/06</td>                 <td>$137,500</td>             </tr>             <tr>                 <td>Rhona Davidson</td>                 <td>Integration Specialist</td>                 <td>Tokyo</td>                 <td>55</td>                 <td>2010/10/14</td>                 <td>$327,900</td>             </tr>             <tr>                 <td>Colleen Hurst</td>                 <td>Javascript Developer</td>                 <td>San Francisco</td>                 <td>39</td>                 <td>2009/09/15</td>                 <td>$205,500</td>             </tr>         </tbody>         <tfoot>             <tr>                 <th>Name</th>                 <th>Position</th>                 <th>Office</th>                 <th>Age</th>                 <th>Start date</th>                 <th>Salary</th>             </tr>         </tfoot>     </table> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.22/js/dataTables.bootstrap4.min.js"></script>  
    • By AlexandrePrezzi
      Seguinte
      Tenho uma página chamada  "teste.php" nessa página tem um formulário com vários campos que o usuário usa para fazer um filtro dos campos a serem pesquisado...
       
      Ao clicar no Pesquisar (submit) ... o action da página faz a seguinte ação
       
      script type="text/javascript"> $(function($){ $('#meuFormulario').submit(function(){ var dados = jQuery(this).serialize(); jQuery.ajax({ type: "POST", url: "src/controller/request_teste.php", data: dados, cache: false, beforeSend: function() { $('#resultPesq').html("Carregando..."); }, success: function(e) { //window.alert(e); $('#resultPesq').html(e); }, error: function() { $('#resultPesq').html('Não foi encontrado dados!'); } }); return false; }); }); </script> O arquivo "request_teste.php", é quem recebe os dados do POST e faz o  tratamento desses dados....
       
      Ao final desse arquivo tem um  require_once 'result_teste.php' que vem a ser o arquivo onde irá mostrar o resultado da pesquisa.
       
      Nesse arquivo eu fiz uma páginação ao final do resultado.
       
      Entao primeiramente o link que estou acessando é 
       
      principal.php?link=teste.php  (abre a pagina com o formulário)
      ao clicar em pesquisar o link nao muda
       
      quando clico em página 2, é feito um refresh e a url fica principal.php?link=teste.php&pag=2
       
      O que acontece é que como a página faz um refresh eu perco todos dados do meu POST e tambem preciso clicar no botão pesquisar pra carregar os dado da página 2.
       
      Alguem sabe como ajustar isso ?

      Se precisarem de mais informações me avisem
       
       
       
    • By New Job
      Tenho um checkout pagseguro configurado em um site e gostaria de ajustar o código. Linguagem é PHP.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.