Jump to content
marcelobbt

Usar TCPDF com Codeigniter

Recommended Posts

Eu estou tentando criar uma página com codeigniter que gere pdf. Para isso estou usando o TCPDF, mas não estou conseguindo inserir o arquivo CSS para formatar o PDF.

 

Controller:

$this->load->helper('pdf_helper');

//dados a serem enviados para vista
$dados = array (...);

$this->load->view('pdfreport', $dados);

Vista:

 

<?php
	tcpdf();
	$obj_pdf = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
	$obj_pdf->SetCreator(PDF_CREATOR);
	$title = "Relatório de Grupo";
	$obj_pdf->SetTitle('Relatório de Grupo Familiar');	
//	$obj_pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, $title, "Monthly Report");
//	$obj_pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
	$obj_pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
	$obj_pdf->SetDefaultMonospacedFont('helvetica');
//	$obj_pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
	$obj_pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
//	$obj_pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
	$obj_pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
	$obj_pdf->SetFont('helvetica', '', 9);
	$obj_pdf->setFontSubsetting(false);
	$obj_pdf->AddPage();
	ob_start();
?>

<img src="<?php echo base_url(); ?>img/bannerRelat.png"/>
<p>&nbsp;</p>
<table border="0">
	<tr>
		<td>
			<h2>Grupo<?php echo $grupo; ?></h2>
		</td>
	</tr>
</table>
<p>&nbsp;</p>
<table width="80%" border="1" cellspacing="2" cellpadding="3">
	<tr>
		<td>Data da Reunião</td>
		<td><?php echo $datareuniaoBD; ?></td>
	</tr>
	<tr>
		<td>Número de Membros</td>
		<td><?php echo $membros; ?></td>
	</tr>
	<tr>
		<td>Membros Presentes</td>
		<td><?php echo $membrosparticipantesBD; ?></td>
	</tr>
</table>
<?php
		$content = ob_get_contents();
	ob_end_clean();
	$obj_pdf->writeHTML($content, true, false, true, false, '');
	$obj_pdf->Output('output.pdf', 'I');
?>

Se insiro um <link href="<?php echo base_url(); ?>css/bootstrap.css" rel="stylesheet"/> ele simplesmente ignora.

Share this post


Link to post
Share on other sites

Primeiramente, acho que deveria rever seu código, entendo que você está colocando algo na camada view que deveria, por exemplo, está no controller. Porque na sua view simplesmente não cria um botão, link, etc... que chame um método do controller e dê saída no PDF?

 

Em relação a sua formatação do PDF, a própria classe TCPDF possui métodos para formatação, utilize eles. Nunca utilizei a classe, mas veja um exemplo na documentação: https://tcpdf.org/examples/example_022/

Share this post


Link to post
Share on other sites

Eu sei que esse código todo deveria estar no controle, mas foi um código que encontrei na net e que funcionou. Quando estava tentando gerar os dados no controle não estava funcionando.

 

Quanto aos métodos de formatação até tentei usar por exemplo um que achei em sua documentação, mas ao tentar mudar a cor ele mudava de todo o conteúdo.

 

Vou tentar ver esse exemplo que passou. Já ajuda alguma coisa, mas o que queria era jogar o css que já tenho criado.

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 jvb
      Olá povo do código, eu confesso que estou sem saber o pq de algumas propriedades do Bootstrap 4.2.1 como por exemplo:
      .img-fluid { max-width:100%; height: auto } não funcionar em outra folha de style, que não seja Bootstrap, a propriedade não esta dentro de @media, essa propriedade eu imaginava ser de uso geral.
      Vejamos que a Página continua linkando para o bootstrap, apenas algumas propriedades não terem efeito em outra folha de styles. 
    • By Sapinn
      Fala galera tudo beleza? Então alguém sabe como adicionar e remover campos de texto com js. Tipo teria um botão com um + "mais" para adicionar novos campos e junto a estes campos teria um ícone com um lixeira para remover, toda vez que fosse clicado nesse ícone o campo seria removido, apenas aquele campo. Encontrei um código para adicionar um campo mas a parte de remover ta dando dor de cabeça
      <!DOCTYPE html> <html lang="pt-br"> <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <title>Pagina</title>     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css"> </head> <body>     <form id="myForm">         <div id="lines"></div>         <button type="button" onclick="addInput('lines')">+</button>         <input type="submit" value="Enviar">       </form>             <script>           var formLine = 1;                 function addInput(divName) {                 var newdiv = document.createElement('div');                 newdiv.innerHTML += '<input type="text" name="produto" id='+formLine+'>';                 newdiv.innerHTML += ' <i class="bi bi-trash-fill"></i>';                 document.getElementById(divName).appendChild(newdiv);                 formLine++;             }         addInput('lines');       </script> </body> </html>  
    • By Sapinn
      Fala galera, tudo blz? Então estou com uma dúvida um pouco boba mas que não consegui resolver o problema ainda. Estou desenvolvendo um site para agendamento de serviços e resolvi fazer a pagina principal como uma dashboard (área de administrador) onde seria muito mais fácil para o usuário registrar os serviços entre outras coisas, enfim, estou com um problema quanto ao layout da página. Normalmente o dashboard tem um menu à esquerda e o conteúdo  fica à direita quando ocorre o clique no botão hambúrguer( Aquele que tem três tracinhos) esse menu é recolhido e esse conteúdo que fica a direita fica centralizado, às vezes, em muitos dashboard esse menu só é um pouco recolhido ficando amostra apenas os ícones enquanto o conteúdo da direita fica um pouco mais centralizado. A pergunta é como eu posso fazer isso? Outra coisa, na responsividade quando a página diminui o menu da uma retraída e o conteúdo fica centralizado quando é clicado no botão hambúrguer o menu não afasta o conteúdo de volta e sim fica por cima desse conteúdo. Não sei como fazer isso, eu estou melhorando quando ao desenvolvimento front-end mas ainda não é muito a minha praia. Eu tentei fazer isso com css grid (que por sinal é algo que eu não tenho tanta pratica, já que eu sou melhor com flebox) mas não funcionou e o código só ficou ruim e confuso. Se alguém puder me ajudar ficaria muito grato
       
      Não tem muito coisa ainda mas irei disponibilizar o código que desenvolvi até agora:
       
      <!DOCTYPE html> <html lang="pt-br"> <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <title>Sistema de Gerenciamento</title>     <link rel="stylesheet" href="assets/css/style.css">     <link rel="icon" href="assets/images/icone-logo.png">     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.4.1/font/bootstrap-icons.css"> </head> <body>     <header>         <div class="bar-header">             <i class="bi bi-list"></i>         </div>     </header>     <nav class="menu">         <div class="user">             <i class="bi bi-person-circle"></i>             <p>Nome do Usuário</p>         </div>         <ul>             <li class="active"><a href=""><i class="bi bi-house-fill"></i> Inicio</a></li>             <li><a href=""><i class="bi bi-calendar-plus-fill"> </i>Adicionar Serviço</a></li>             <li><a href=""><i class="bi bi-person-plus-fill"></i> Adicionar Admin</a></li>             <li><a href=""><i class="bi bi-file-earmark-post-fill"></i> Configurações de Nota</a></li>             <li><a href=""><i class="bi bi-file-person"></i> Configurações da Conta</a></li>             <li><a href=""><i class="bi bi-box-arrow-right"></i> Sair</a></li>         </ul>     </nav>     <main></main>     <footer></footer> </body> </html>  
       
      *{     padding: 0;     margin: 0; } body{     font-family: Arial, Helvetica, sans-serif;     background-color: #e5e5e5; } .bar-header{     background-color: #4285f4;     position: fixed;     color: #fff;     width: 100%;     height: 40px;     font-size: 37px;     padding: 8px 16px;     z-index: 1; } .menu{     background-color: #26353e;     width: 260px;     height: 100vh;     position: fixed;     padding-top: 65px; } .menu ul li{     list-style: none;     padding: 15px;     cursor: pointer;     border-bottom: 1px solid #26353e; } .menu ul li:hover{     background-color: #4285f4;      } .menu li a{     color: #fff;     font-size: 18px;     text-decoration: none;     } .menu i{     font-size: 27px; } .menu .active{     background-color: #4285f4; } .user{     margin-left: 50px;     padding-bottom:10px ; } .user i{     font-size: 120px;     color: #4285f4; } .user p{     font-weight: bold;     font-size: 18px;     color: #fff; }
       
    • By Sapinn
      Opa galera tudo beleza? Então criei um layout de um dashboard com css grid e eu gostaria de fixar o menu lateral na esquerda e a barra que está em cima e quando eu rolasse para baixo a unica coisa que mexesse fosse o conteúdo da direita. Já tentei usar o position fixed mas ele quebra a página, tentei usar o position: sticky mas ele não funciona. Alguém sabe como resolver isso ?
    • By programananet
      Quero vender códigos fontes de sites para empresas ou outras pessoas com um site fazendo a mediação !
      Existe um site onde podemos vender código fonte , se sim qual e como vendemos ?
×

Important Information

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