Criar arquivos em pdf com php

PHP

03/10/2015

Boa Noite Pessoal!

Hoje me deparei com a necessidade de imprimir dados uma pagina php que possuo, dei uma olhada na internet onde encontrei várias classes para fazer isso tipo: MPDF, html2pdf, tcpdf, etc, mas pelo que vi muitas vezes são arquivos muito grandes de até 50mb e muitas vezes também tem funções bem limitadas, gostaria saber se vcs conhecem alguma classe melhor que seja um arquivo bem pequeno se possível criar o código direto para gerar o pdf e exibir no bowser
Moisés

Moisés

Curtidas 0

Melhor post

Felipe

Felipe

21/10/2015

Moises!

dei uma olhada no teu código, não tem problema algum e pelo que ví vc esta conseguindo mostrar os itens com o FOREACH

pelo que ví, vc esta usando uma array simles para a SESSION, se vc utilizar uma array bidimenisonal acho que seria melhor, tipo:

$_SESSION['matriz']['indice']['valor']

ou seja a $_SESSION vai conter algo tipo isso:

id | produto | qtd | preço
1 | prod1 | 10 | 1.00
2 | prod2 | 20 | 2.00
3 | prod3 | 30 | 3.00

o FOREACH{} faz o que esta dentro das chaves para todos os elementos do vetor até acabar-se os elementos, o problema nesse caso é dividir por grupos

usando o FOR ou WHILE ou ainda o DO WHILE conseguimos o seguinte resultado

id: 1
prod: produto1
qtd: 10
preco: 1.00

id: 2
prod: produto2
qtd: 20
preco: 2.00

id: 3
prod: produto3
qtd: 30
preco: 3.00

faça o teste em uma pagina PHP qualquer

session_start();
$_SESSION['vetor'] = array();

$_SESSION['vetor']['id'][] = "1";
$_SESSION['vetor']['prod'][] = "produto1";
$_SESSION['vetor']['qtd'][] = "10";
$_SESSION['vetor']['preco'][] = "1.00";

$_SESSION['vetor']['id'][] = "2";
$_SESSION['vetor']['prod'][] = "produto2";
$_SESSION['vetor']['qtd'][] = "20";
$_SESSION['vetor']['preco'][] = "2.00";

$_SESSION['vetor']['id'][] = "3";
$_SESSION['vetor']['prod'][] = "produto3";
$_SESSION['vetor']['qtd'][] = "30";
$_SESSION['vetor']['preco'][] = "3.00";


$s = sizeof($_SESSION['vetor'],1) -4;// menos a quantidade de indices

print_r ($_SESSION['vetor']);
//print_r ($vetor);

echo "<br><br><strong>Listando SESSION array bidimensional  com FOR</strong><br>";
for ($f =0; $f <(($s)/4); $f++) {// tamanho do array dividido pela quantidade de indices
 echo "id:  ".$_SESSION['vetor']['id'][$f]."<br>";
 echo "prod:  ".$_SESSION['vetor']['prod'][$f]."<br>";
 echo "qtd:  ".$_SESSION['vetor']['qtd'][$f]."<br>";
 echo "preco:  ".$_SESSION['vetor']['preco'][$f]."<br><br>";
 }
GOSTEI 1

Mais Respostas

Viviane Hess

Viviane Hess

03/10/2015

Moises, considero a melhor forma utilizando uma biblioteca.

http://www.voltsdigital.com.br/labs/gerando-arquivo-pdf-a-partir-de-um-html-com-o-php/

[url]http://www.devwilliam.com.br/php/gerar-pdf-com-php-e-a-biblioteca-mpdf[/url]
GOSTEI 0
Marcio Araujo

Marcio Araujo

03/10/2015

O artigos do William são ótimos, confere ai no link que a Viviane postou.
GOSTEI 0
Moisés

Moisés

03/10/2015

Moises, considero a melhor forma utilizando uma biblioteca.

http://www.voltsdigital.com.br/labs/gerando-arquivo-pdf-a-partir-de-um-html-com-o-php/

[url]http://www.devwilliam.com.br/php/gerar-pdf-com-php-e-a-biblioteca-mpdf[/url]


Então Viviane esta é uma das bibliotecas que vi e também uma das maiores a unica desvantagem que achei nela e o tamanho que chega a ser superior a 50mb ou seja acho que é é muita coisa para subir pro servidor apenas agerar uma pagina em pdf, mas muito obrigado pela resposta, se não conseguir outra forma será esta que utilizarei.
GOSTEI 0
Viviane Hess

Viviane Hess

03/10/2015

Sem biblioteca eu desconheço, sempre leio artigos que mostram a utilização deles, se achar alguma solução mais leve por favor nos indique.
GOSTEI 0
Marcio Araujo

Marcio Araujo

03/10/2015

Já pesquisou sobre soluções somente com HTML?
GOSTEI 0
Cleyton Caetano

Cleyton Caetano

03/10/2015

Y te
Moises, considero a melhor forma utilizando uma biblioteca.

http://www.voltsdigital.com.br/labs/gerando-arquivo-pdf-a-partir-de-um-html-com-o-php/

[url]http://www.devwilliam.com.br/php/gerar-pdf-com-php-e-a-biblioteca-mpdf[/url]


Então Viviane esta é uma das bibliotecas que vi e também uma das maiores a unica desvantagem que achei nela e o tamanho que chega a ser superior a 50mb ou seja acho que é é muita coisa para subir pro servidor apenas agerar uma pagina em pdf, mas muito obrigado pela resposta, se não conseguir outra forma será esta que utilizarei.


Mano, já procurei muito mas não encontrei não, a forma melhor e mais fácil que conheço é essa biblioteca aí....
GOSTEI 0
Viviane Hess

Viviane Hess

03/10/2015

Bem que eu desconfiava disso Cleyton.
GOSTEI 0
Cleyton Caetano

Cleyton Caetano

03/10/2015

Bem que eu desconfiava disso Cleyton.

Sem falar que 50 megas não é lá muita coisa quando se fala de funcionalidade, afinal praticamente todos os serviços de hospedagem possuem planos com espaço ilimitado no disco
GOSTEI 0
Viviane Hess

Viviane Hess

03/10/2015

Fazer um plano com limite de espaço em disco não é um bom negocio.
GOSTEI 0
Cleyton Caetano

Cleyton Caetano

03/10/2015

Fazer um plano com limite de espaço em disco não é um bom negocio.

Nada limitado é bom kkkk
Viviane estou desenvolvendo um projeto me envia um email 📧 pra nós poder discutir sobre....
GOSTEI 0
Cleyton Caetano

Cleyton Caetano

03/10/2015

cleyton.caetano10@gmail.com
GOSTEI 0
Savio Leitão

Savio Leitão

03/10/2015

Melhor usar essas bibliotecas disponiveis, vai facilitar e muito a sua vida.
GOSTEI 0
Viviane Hess

Viviane Hess

03/10/2015

Creio que não posso ajudar muito Cleyton, não tenho experiencia com desenvolvimento ainda, ainda estudando.
GOSTEI 0
Cleyton Caetano

Cleyton Caetano

03/10/2015

Creio que não posso ajudar muito Cleyton, não tenho experiencia com desenvolvimento ainda, ainda estudando.

2 estudando kkkk
GOSTEI 0
Viviane Hess

Viviane Hess

03/10/2015

Irei atrapalhar mais que ajudar, tenho certeza disso, sinceridade não me falta. boa sorte no seu projeto.
GOSTEI 0
Moisés

Moisés

03/10/2015

Bom Dia pessoal!

Muito obrigado pela ajuda de todos, irei usar o mpdf por enquanto, depois se eu conseguir alguma forma substituo.
GOSTEI 0
Viviane Hess

Viviane Hess

03/10/2015

Bom Dia pessoal!

Muito obrigado pela ajuda de todos, irei usar o mpdf por enquanto, depois se eu conseguir alguma forma substituo.


Tudo bem Moises, boa sorte e sucesso.
GOSTEI 0
Marcio Araujo

Marcio Araujo

03/10/2015

Boa sorte Moises.
GOSTEI 0
Moisés

Moisés

03/10/2015

Obrigado Pessoal valeu
GOSTEI 0
Moisés

Moisés

03/10/2015

Pessoal estou tentando usar a mpdf, porém estou tendo dificuldades pois a pagina que preciso criar o pdf está cheia de código em php um monte variáveis, e preciso que o conteúdo delas seja impresso em pdf , mas não estou conseguindo, o mpdf está imprimindo apenas o html, já parte em php, o código esta sendo impresso.
GOSTEI 0
Cleyton Caetano

Cleyton Caetano

03/10/2015

Pessoal estou tentando usar a mpdf, porém estou tendo dificuldades pois a pagina que preciso criar o pdf está cheia de código em php um monte variáveis, e preciso que o conteúdo delas seja impresso em pdf , mas não estou conseguindo, o mpdf está imprimindo apenas o html, já parte em php, o código esta sendo impresso.
Mano explica melhor, posta o código e diz qual erro tá dando, pq eu uso ela e não vejo dificuldades...
GOSTEI 0
Moisés

Moisés

03/10/2015

Cleyton Caetano o erro é o seguinte " Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\wamp\www\Manafestas\orca_pdf.php on line 19", esta linha corresponde a um laço de repetição.

segue o código:
<?php
	include("mpdf60/mpdf.php");
	session_start();
	$total = 0;
	$i = 0;

	$html = "<table width='620' border='0' id='tabela'>
                            <tr>
                                <td width='20'>#</td>
                                <td width='200'>Nome</td>
                                <td colspan='2'>Qtd / Descri.</td>
                                <td width='120'>Vl.Unit</td>
                                <td width='120'>Subtotal</td>
                            </tr>                   

                        $total = 0;
                        $i = 0; 
                        foreach($_SESSION['orca'] as $k=>$v){
                        $i = $i + 1;
                             $query = $mysqli->query("SELECT * FROM cad_prod where id_prod = $k");
                             $linha = mysqli_fetch_assoc($query);
							 $descri = $linha['descri_prod'];
                             $subtotal = $linha['preco_prod'] * $v;
                             $total = $total	+ $subtotal;
                    
                            <tr>
                                <td><?php echo $i; ?></td>
                                <td><?php echo $linha['nome_prod']; ?></td>
                                <td width='150'><?php echo $v; ?><?php echo " ". $descri; ?></td>
                                <td width='15'><?php echo $linha['id_prod']; ?></td>
                                <td><?php echo 'R$ '. number_format ($linha['preco_prod'],2,',','.'); ?> </td>
                                <td><?php echo 'R$ '. number_format ($subtotal,2,',','.'); ?></td>
                            </tr>
                        </form>
                        
                    <?php } ?><!-- fim do forech-->
                             <tr>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td>Total:</td>
                                <td colspan="2"><?php echo 'R$ '. number_format($total,2,',','.'); ?></td>
                            </tr>
                         </table>";
						 
	$mpdf=new mPDF(); 
	$mpdf->SetDisplayMode('fullpage');
	//$css = file_get_contents("css/orca_pdf.css");
	$mpdf->WriteHTML($html);
	$mpdf->Output();
	exit;
	
?>
GOSTEI 0
Moisés

Moisés

03/10/2015

Alguém me ajuda por favor!!!
GOSTEI 0
William

William

03/10/2015

Dentro da variável $html você está misturando código PHP com HTML, linha 19.

$total = 0;
$i = 0; 
foreach($_SESSION['orca'] as $k=>$v){
$i = $i + 1;
$query = $mysqli->query("SELECT * FROM cad_prod where id_prod = $k");
$linha = mysqli_fetch_assoc($query);
$descri = $linha['descri_prod'];
$subtotal = $linha['preco_prod'] * $v;
$total = $total    + $subtotal;
GOSTEI 0
Felipe

Felipe

03/10/2015

para que as variáveis sejam impressas faça assim:

*antes do $html vc recolhe todos os dados do banco e recupera as variavais recebidas via POST ou GET
*depois vc coloca elas em outras variaveis e exibe no html.

Ex:.

$id = $_POST['id'];

query("SELECT * FROM tabela where id = $id");
$linha = mysql_fetch_assoc($query);

$nome = linha['nome'];
$idade = linha['idade'];

$html ='<p>Eu sou <strong>'.$nome.'</strong></p>
       <p>Tenho <strong>'.$idade.'</strong></p>';

$mpdf=new mPDF("A4","L");// aqui o formato e a orientação da folha
$mpdf->charset_in='windows-1252';//aqui o tipo de codificação,OBS: sem esta etapa acima pode ficar alguns caracteres estrahos quando retirados do banco
$mpdf->SetDisplayMode('fullpage');
$css = file_get_contents("estilo.css");//aqui o endereço da folha de estilos
$mpdf->WriteHTML($css,1);//aqui vc envia o CSS para o PDF
$mpdf->WriteHTML($html);//aqui vcc envia o HTML para o PDF
$mpdf->Output();// aqui é a saida HTML, neste formato apenas mostra o PDF sem salvá-lo



para mais informaçoes consulta a documentação do mpdf http://mpdf1.com/manual/index.php
GOSTEI 0
Moisés

Moisés

03/10/2015

para que as variáveis sejam impressas faça assim:

*antes do $html vc recolhe todos os dados do banco e recupera as variavais recebidas via POST ou GET
*depois vc coloca elas em outras variaveis e exibe no html.

Ex:.

$id = $_POST['id'];

query("SELECT * FROM tabela where id = $id");
$linha = mysql_fetch_assoc($query);

$nome = linha['nome'];
$idade = linha['idade'];

$html ='<p>Eu sou <strong>'.$nome.'</strong></p>
       <p>Tenho <strong>'.$idade.'</strong></p>';

$mpdf=new mPDF("A4","L");// aqui o formato e a orientação da folha
$mpdf->charset_in='windows-1252';//aqui o tipo de codificação,OBS: sem esta etapa acima pode ficar alguns caracteres estrahos quando retirados do banco
$mpdf->SetDisplayMode('fullpage');
$css = file_get_contents("estilo.css");//aqui o endereço da folha de estilos
$mpdf->WriteHTML($css,1);//aqui vc envia o CSS para o PDF
$mpdf->WriteHTML($html);//aqui vcc envia o HTML para o PDF
$mpdf->Output();// aqui é a saida HTML, neste formato apenas mostra o PDF sem salvá-lo



para mais informaçoes consulta a documentação do mpdf http://mpdf1.com/manual/index.php


Felipe, o problema é que este dados eu pego de uma SESSION[] que é um Arry nela eu recebo duas informações nela o Id e a qtd, não tenho como pegar isso por POST ou GET pois não é um formulário, e de qualquer maneira eu precisarei do laço de repetição nesta pagina pois vai vai trazendo de um por um os produtos da base pelo id e seta a qtd.
GOSTEI 0
Moisés

Moisés

03/10/2015

Dentro da variável $html você está misturando código PHP com HTML, linha 19.

$total = 0;
$i = 0; 
foreach($_SESSION['orca'] as $k=>$v){
$i = $i + 1;
$query = $mysqli->query("SELECT * FROM cad_prod where id_prod = $k");
$linha = mysqli_fetch_assoc($query);
$descri = $linha['descri_prod'];
$subtotal = $linha['preco_prod'] * $v;
$total = $total    + $subtotal;



William, sim estou misturando mesmo, como você pode observar este neste trecho de código faço uma query trazendo trazendo de um por um os produto e loço vai imprimindo na tela, sem este laço não vou conseguir imprimir os produtos.
GOSTEI 0
Felipe

Felipe

03/10/2015

Moisés!
PHP e HTML são linguagens diferentes Não tem como misturar os códigos pois o programa nao vai entender, o que vc pode fazer é:

* escrever o código em html e inserir o código PHP dentro de <?php ... ?>
* escrever o código em PHP e inserir o HTML dentro do echo ' ....';

no caso da biblioteca mpdf é PHP entao o que vc tem que fazer é escrever o HTML dentro do echo e quando precisar escrever alguma variavel em PHP vc fecha a aspa e concatena a variável com o ponto.
EX.:
$nome = "Felipe"
echo '<p>meu nome é: '.$nome; // saída será: meu nome é: Felipe

$nome = "Felipe";
$idade = "x";
$html = '<p>meu nome é '.$nome.' e minha idade é '.$idade.' anos';
echo $html; //saída será: meu nome é Felipe e minha idade é x anos


quanto ao laço de repetição vc pode fazer sem problema algum, porém faça tudo antes (cuidando para nao misturar o HTML e o PHP) e por ultimo faça o $mpdf->output();

** agora nao estou em casa, mas de noite eu posto um relatório de clientes que eu fiz em PDF, inclusive com laço de repetição do{}while, linhas zebradas, identificação do usuário que recebe da SESSION e numeração das paginas no cabeçalho...

mas se quiser ir dando uma antecipada no assunto veja um simples modelo de recibo neste site: http://www.devwilliam.com.br/php/gerar-pdf-com-php-e-a-biblioteca-mpdf
GOSTEI 0
Felipe

Felipe

03/10/2015

[img]http://arquivo.devmedia.com.br/forum/imagem/458083-20151016-231910.png[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/458083-20151016-230756.png[/img]

ai tem um print do relatorio,

em uma pagina anterior eu defino a ordem se será ASC ou DESC, se irá exibir por COD, por NOME ou por CIDADE e se os campos que serao exibidos serão ATIVOS, INATIVOS, BLOQUEADOS ou TODOS e encaminho via POST

abaixo esta o codigo do relatorio simples de clientes, espero que seja útil, fiz o loop com a array recolhida do banco mas nada impede que seja feita com a da sessão... qualquer dúvida posta ai que estamos ai pra se ajuar..

<?php

header("Content-Type: text/html; charset=ISO-8859-1", true); 

	include("mpdf60/mpdf.php");
	include 'sessao.php'; 
	include 'open_db.php'; // aqui eu icluo a conexão com o Banco de dados
	$login = $_SESSION['login']; // recebe o login do usuario
	
//recebe os dados via POST		
	$ordenar =$_POST['ordenar'];// ordenar por COD, NOME ou CIDADE
	$ordem = $_POST['ordem'];// ordem crescente = ASC ou decrescente = DESC
	$situacao = $_POST['situacao']; // situação A = ATIVO, I = INATIVO, B = BLOQUEADO e T = TODOS
	
// seleciona os dados da tabela usuario usuario
	$sql = mysql_query("SELECT * FROM tb_usuario WHERE login='$login'");
   $usuario = mysql_fetch_array($sql);
   
// seleciona os dados da empresa apenas para exibir o logo no cabeçalho da pagina
   $sql = mysql_query("SELECT * FROM tb_empresa WHERE ativo='1' " );
   $empresa = mysql_fetch_array($sql);
   
// seleciona os dados no banco  ( se T escreve todos senao escreve conforme a situação--- situação recebida via POST)
   if($situacao =='t'){
   $sql_cli = mysql_query("SELECT * FROM tb_cliente ORDER BY $ordenar $ordem" ) or die(mysql_error());
   $busca_cli = (mysql_num_rows($sql_cli));
   $cliente = mysql_fetch_array($sql_cli);
   }else {
   
   $sql_cli = mysql_query("SELECT * FROM tb_cliente WHERE situacao='$situacao' ORDER BY $ordenar $ordem ") or die(mysql_error());
   $busca_cli = (mysql_num_rows($sql_cli));
   $cliente = mysql_fetch_array($sql_cli);	

   }
   
     
  
// configurações do relatorio
   $clientes_por_pag = 25;//quantidade de registros por pagina
   $value_zeb = false;// inicialização do zebrado da linha, false inicia em branco true inicia em cinza
   $qtd_clients = 0;// inicialização do contador de clientes
   $pagina = 0;// inicialização do numero da pagina
   $sp_ant = 6;//espaçamento entre linhas
   $titulo = "Relatório de Clientes - Simples";// titulo do relatorio
	date_default_timezone_set('America/Sao_Paulo');// define o relógio 
   $date = date('d/m/Y');// busca a data
   $hora = date('H:i'); // busca a hora
   $item = 1;
   
//funçao para que se nao tiver numero de telefone seleciona o celular

function situacao($situacao) { // função para escrever por extenso a situação, desta forma uso menos espaço no banco de dados
	
	if($situacao == "A") { return "Ativo";}
	if($situacao == "I") { return "Inativo";}
	if($situacao == "B") { return "Bloqueado";}
}

function telefone($telefone,$celular) {// função para escrever o telefone, se nao tiver telefone fixo escreve o celular
	
   $telefone = trim($telefone);  
   
   if(empty($telefone)){
   $telefone = $celular;
   }
   
   return $telefone;
	
	}
	
// desenha a pagina PDF
	
	$html = '
	<h3> Relatório de Clientes - Simples</h3><br>
	<div class="direita texto">Data do Relatório: '.$date.' --- Hora do Relatório: '.$hora.'</div>';


	$linha_dupla = '<div class="linha">=====================================================================================================================================</div>';

	
  $rodape = '<hr><table width="800px" border="0"><tr><td width="50%"><p class="rodape">Total de registros: '.$busca_cli.'</p></td>
  <td width="50%"><p class="rodape direita">Usuário: '.$usuario['nome'].'</p></td></tr></table>';

//------------------------------------inicio do PDF------------------------------------------------
   $mpdf=new mPDF();//cria o PDF
	$mpdf->charset_in='windows-1252';//define a codificação dos caracteres
	$mpdf->SetDisplayMode('fullpage');//define o tamanho da pagina
	$css = file_get_contents("css/estilo_relatorio.css");//busca o CSS na pasta
	$mpdf->WriteHTML($css,1);//envia o CSS para o PDF
	$mpdf->SetTitle($titulo);//define o tiiulo da pagina --- este será exibido na aba da janela


if($busca_cli > 0){	
	//calcula quantas paginas serão necessárias para imprimir todos os resultados
	$total_pag = ceil($busca_cli / $clientes_por_pag);
	
//Loop para mostrar os dados
do
{
   //utilizo o operador MOD para verificar se a pagina atingiu o limite max de linhas se sim entao cria uma pagina nova e escreve o cabeçalho novamente senao apenas pula para linha debaixo
	$cli_max = $qtd_clientes % $clientes_por_pag;	
	if($cli_max == 0){
		
	$pagina++;
	$mpdf->SetHeader('Página '.$pagina.' de '.$total_pag);//cria o cabeçalho
   $mpdf->SetHTMLFooter($rodape);// cria o rodapé
	$mpdf->AddPage('A4','L');

//primeira parte do relatorio
	$mpdf->Image($empresa['logo'], 25, 20, 20, 12,'PNG');// desenha o LOGO da empresa
	$mpdf->SetY(15);	
	$mpdf->WriteHTML($html);
	$mpdf->Ln(3);
	$mpdf->WriteHTML($linha_dupla);
	$mpdf->Ln(1);
	$mpdf->SetFont('sans-serif', 'B', 8);
	$mpdf->WriteCell(10,3,"  ITEM");
	$mpdf->WriteCell(10,3,"COD", 0, 0, 'C');
   $mpdf->WriteCell(50,3,"NOME");
	$mpdf->WriteCell(20,3,"TELEFONE");
	$mpdf->WriteCell(25,3,"CIDADE");
	$mpdf->WriteCell(15,3,"ESTADO");
	$mpdf->WriteCell(50,3,"E-MAIL");
	$mpdf->WriteCell(20,3,"SITUAÇÃO");
	$mpdf->WriteCell(20,3,"CADASTRO");
	$mpdf->Ln(4);
	$mpdf->WriteHTML($linha_dupla);
	$mpdf->Ln(1);
	
	$mpdf->SetFont('sans-serif', '', 8);// formata a fonte do relatorio

	}else {
	
//pula linha
	$mpdf->Ln($sp_ant);
	 }  



// desenha zebrado

   if (!$value_zeb){
     $mpdf->SetFillColor(255,255,255);
     $value_zeb = true ;
   } else {
      $mpdf->SetFillColor(225,225,225);
     $value_zeb = false ;
   }   
   $mpdf->SetX(15);
   $mpdf->Cell(265,$sp_ant, ' ',0,0,'L',true);
   $mpdf->SetX(15);
   
// formata os dados do banco em utf-8
   $item_cli = utf8_encode($item++);
   $id_cli = utf8_encode($cliente['id']);
   $nome_cli = utf8_encode($cliente['nome']);
   $fone_cli = utf8_encode(telefone($cliente['telefone'],$cliente['celular']));
   $cidade_cli = utf8_encode($cliente['cidade']);
   $estado_cli = utf8_encode($cliente['estado']);
   $email_cli = utf8_encode($cliente['email']);
   $situacao_cli = utf8_encode(situacao($cliente['situacao']));
   $data_cli = utf8_encode($cliente['data']);
   
//envia para o PDF a celula com os dados
   $mpdf->WriteCell(10,$sp_ant,$item_cli, 0, 0, 'C');
   $mpdf->WriteCell(10,$sp_ant,$id_cli, 0, 0, 'C');
   $mpdf->WriteCell(50,$sp_ant,$nome_cli);
	$mpdf->WriteCell(20,$sp_ant,$fone_cli);
	$mpdf->WriteCell(25,$sp_ant,$cidade_cli);
	$mpdf->WriteCell(15,$sp_ant,$estado_cli, 0, 0, 'L');
	$mpdf->WriteCell(50,$sp_ant,$email_cli);
	$mpdf->WriteCell(20,$sp_ant,$situacao_cli);
	$mpdf->WriteCell(20,$sp_ant,$data_cli);
	 
$qtd_clientes++;

}while ($cliente = mysql_fetch_array($sql_cli));// enquanto tiver linhas no banco para serem exibidas o do While vai fazer o Loop
}//fim do if


	// Output("relatorio.pdf","F");  ---- apenas salva o PDF e nao exibe
	// Output("relatorio.pdf","D");  ---- disponibiliza o PDF para download
	// Output("relatorio.pdf","I");  ---- exibe o PDF e nao salva
	       
	$mpdf->Output("relatorio.pdf","I");    //gera o PDF
 
 
 include 'close_db.php';// aqui eu incluo a desconexao com o banco

	exit;

?>
GOSTEI 0
Felipe

Felipe

03/10/2015

se quiserem usar o mesmo modelo de relatorio ai esta o CSS, tem algumas configurações a mais porque uso para mais de um relatorio

lembre se que ele está configurado dentro da pasta CSS ($css = file_get_contents("css/estilo_relatorio.css");)

fieldset.bd_black{
	width:  800px;
	margin: 10px auto;
	color: #444;
	border: 2px solid #000;
	font-family: Helvetica;
	padding: 15px;
}

h3{
	text-align: center;
}

.texto{
	font-size: 10px;
	font-family: sans-serif;
}

hr{
    color: #000000;

}

p.rodape{
    font-size: 12px;
    font-weight: bold;
    font-style: italic;
    font-family: serif;
    color: #000000;
    
}

div.linha{
   font-size: 10px;
	font-family: sans-serif;
	line-height:10%;
}

div.relatorio{
   font-size: 10px;
	font-family: sans-serif;
	line-height:10%;
}

.direita{
	text-align: right;
}

.center{
	text-align: center;
}
GOSTEI 0
Moisés

Moisés

03/10/2015

se quiserem usar o mesmo modelo de relatorio ai esta o CSS, tem algumas configurações a mais porque uso para mais de um relatorio

lembre se que ele está configurado dentro da pasta CSS ($css = file_get_contents("css/estilo_relatorio.css");)

fieldset.bd_black{
	width:  800px;
	margin: 10px auto;
	color: #444;
	border: 2px solid #000;
	font-family: Helvetica;
	padding: 15px;
}

h3{
	text-align: center;
}

.texto{
	font-size: 10px;
	font-family: sans-serif;
}

hr{
    color: #000000;

}

p.rodape{
    font-size: 12px;
    font-weight: bold;
    font-style: italic;
    font-family: serif;
    color: #000000;
    
}

div.linha{
   font-size: 10px;
	font-family: sans-serif;
	line-height:10%;
}

div.relatorio{
   font-size: 10px;
	font-family: sans-serif;
	line-height:10%;
}

.direita{
	text-align: right;
}

.center{
	text-align: center;
}


Cara valeu amanham eu irei tentar usar o seu como modelo.
GOSTEI 0
Moisés

Moisés

03/10/2015

Felipe, muito obrigado pelo exemplo que vc postou, mas cara infelizmente eu ainda não consegui peguei o seu exemplo e tentei substituir as suas informações pelas minhas mas não deu certo.
Cara sou novo com PHP e não entendo muito bem ainda, se não for pedir muito será que vc poderia exemplo usando minha situação onde você teria pegar de uma SESSION do tipo Array que já está carregada com duas informações ID e QTD e buscar as outras informações no Banco?

No meu caso eu tenho um SESSION[orca] do tipo array, onde na mesma tenho que capturar a KEY dela que é o ID do protudo e Value que é QTD do meu produto, ou seja terei que usar os ID's ($K) que já estão na session para buscar o produto no banco.

Tentei usar outros laços para fazer isso mas não consegui!

foreach($_SESSION['orca'] as $k=>$v){ //uso para pegar a Key e o Value do Array que é minha SESSION e busco no banco de dados vai imprimindo na tela um por um.
$i = $i + 1;//Apenas um contador para saber quantos itens tenho no orçamento
$query = $mysqli->query("SELECT * FROM cad_prod where id_prod = $k"); //Busco o produto banco com onde o ID for igual $K que o id do produto selecionado pelos cliente
$linha = mysqli_fetch_assoc($query);
$descri = $linha['descri_prod'];
$subtotal = $linha['preco_prod'] * $v;
$total = $total + $subtotal;


Desde já muito obrigado pela dedicação de cada um vocês..
GOSTEI 0
Felipe

Felipe

03/10/2015

Moisés!

de noite posto alguma coisa sobre o seu código, mas pelo que ví que vc não está conseguindo fazer é buscar os dados no banco, pois para inserir no PDF nada mais é do que fazer um loop na hora de imprimir a linha:

Algoritmo:
1 - Busca os dados - (independente da forma)
2 - Define os Valores e/ou Cria funções para o calculo dos valores (não esqueça de definir um valor máximo de linhas)
3 - cria o PDF
4 - configura o arquivo CSS para o PDF
5 - desenha o cabeçalho da pagina PDF
//inicio do LOOP
6 - se (numero de linhas por pagina atingiu o máximo)
6.1 - desenha o cabeçalho da pagina PDF
6.2 - desenha a linha com os dados do banco / se preciso chama a função para calcular
7 - senao
7.1 - desenha a linha com os dados do banco / se preciso chama a função para calcular
//fim do LOOP
8 - envia o MPDF para a pagina PDF
// a variavel $mpdf é um objeto carregado com todas as variáveis e layout para a pagina PDF

A unica razão pela qual eu uso o POST é para receber a forma de ordenar os dados, pois a busca eu faço na tabela

$sql_cli = mysql_query("SELECT * FROM tb_cliente ORDER BY $ordenar $ordem" );
$busca_cli = (mysql_num_rows($sql_cli));
$cliente = mysql_fetch_array($sql_cli);

$busca_cli vai receber o numero de linhas, ou seja, quantos LOOPs devem ser feitos para inserir todas as linhas
$cliente ser a array que vai conter os dados da linha do banco

***no seu caso (veja se estou correto no meu raciocínio quanto ao teu código)

vc recupera da SESSION[orca] o ID e Quantidade
$k = $_SESSION['id'];
$v = $_SESSION['value'];

e procurar o nome do produto no banco
$query = $mysqli->query("SELECT * FROM cad_prod where id_prod = $k");
define as variaveis

$linha = mysqli_fetch_assoc($query);
$descri = $linha['descri_prod'];
$subtotal = $linha['preco_prod'] * $v;
$total = $total + $subtotal;

Agora vc vai ter que descobrir o total de itens que tem no orçamento para fazer o Loop (não sei quantos itens vc guarda na session, se é fixo ou não)

1 - manda para o objeto o cabeçalho da pagina e os valores que nao irao mudar com os itens ( nome do cliente, data, validade, endereço)
2 - inicia o Loop
3 - em cada laço do loop vc vai ter que pesquisar no banco o produto e o preço
3.1 - calcula o subtotal
3.2 - guarda em variaveis globais o total, total de itens, total de ICMS, etc. Ex:( $total += subtotal; )
4 - termina o Loop
5 - manda para o objeto os valores que faltaram, ( total geral, total de ICMS, total de itens)
6 - envia o objeto para o PDF
GOSTEI 0
Moisés

Moisés

03/10/2015

Moisés!

de noite posto alguma coisa sobre o seu código, mas pelo que ví que vc não está conseguindo fazer é buscar os dados no banco, pois para inserir no PDF nada mais é do que fazer um loop na hora de imprimir a linha:

Algoritmo:
1 - Busca os dados - (independente da forma)
2 - Define os Valores e/ou Cria funções para o calculo dos valores (não esqueça de definir um valor máximo de linhas)
3 - cria o PDF
4 - configura o arquivo CSS para o PDF
5 - desenha o cabeçalho da pagina PDF
//inicio do LOOP
6 - se (numero de linhas por pagina atingiu o máximo)
6.1 - desenha o cabeçalho da pagina PDF
6.2 - desenha a linha com os dados do banco / se preciso chama a função para calcular
7 - senao
7.1 - desenha a linha com os dados do banco / se preciso chama a função para calcular
//fim do LOOP
8 - envia o MPDF para a pagina PDF
// a variavel $mpdf é um objeto carregado com todas as variáveis e layout para a pagina PDF

A unica razão pela qual eu uso o POST é para receber a forma de ordenar os dados, pois a busca eu faço na tabela

$sql_cli = mysql_query("SELECT * FROM tb_cliente ORDER BY $ordenar $ordem" );
$busca_cli = (mysql_num_rows($sql_cli));
$cliente = mysql_fetch_array($sql_cli);

$busca_cli vai receber o numero de linhas, ou seja, quantos LOOPs devem ser feitos para inserir todas as linhas
$cliente ser a array que vai conter os dados da linha do banco

***no seu caso (veja se estou correto no meu raciocínio quanto ao teu código)

vc recupera da SESSION[orca] o ID e Quantidade
$k = $_SESSION['id'];
$v = $_SESSION['value'];

e procurar o nome do produto no banco
$query = $mysqli->query("SELECT * FROM cad_prod where id_prod = $k");
define as variaveis

$linha = mysqli_fetch_assoc($query);
$descri = $linha['descri_prod'];
$subtotal = $linha['preco_prod'] * $v;
$total = $total + $subtotal;

Agora vc vai ter que descobrir o total de itens que tem no orçamento para fazer o Loop (não sei quantos itens vc guarda na session, se é fixo ou não)

1 - manda para o objeto o cabeçalho da pagina e os valores que nao irao mudar com os itens ( nome do cliente, data, validade, endereço)
2 - inicia o Loop
3 - em cada laço do loop vc vai ter que pesquisar no banco o produto e o preço
3.1 - calcula o subtotal
3.2 - guarda em variaveis globais o total, total de itens, total de ICMS, etc. Ex:( $total += subtotal; )
4 - termina o Loop
5 - manda para o objeto os valores que faltaram, ( total geral, total de ICMS, total de itens)
6 - envia o objeto para o PDF




Felipe primeiramente muito obrigado pela sua paciência comigo até agora! Irei postar abaixo o meu código da pagina de "orcamento.php" que é que recebe os dados do produto e quem dará origem o arquivo em pdf, talvez este código ajude vc a entender melhor o que estou fazendo e assim facilite para achar uma solução.
GOSTEI 0
Moisés

Moisés

03/10/2015

Felipe segue o Código:

               
                    <?php
				session_start();
				require_once('phpconfig/conecta.php');//conecto ao banco

                        if(isset($_POST['id'])){
                            $id = intval ($_POST['id']); //pego o id do produto da pagina anterior
                            //$qtd = intval ($_POST['qtd']);	//pego a Qtd também da pagina anterior geralmente este valor é um!

//Aqui eu crio a sessesion orca se ela não existir!		
                            if(!isset($_SESSION['orca'])){
                                $_SESSION['orca'] = array(); // transformo a session em Array
                            }		
                            if(empty($_SESSION['orca'][$id])){ //  se session for vazia  o id = 1. este id é a minha será o valeu que será qtd lá frente
                                $_SESSION['orca'][$id] = 1;
                            } 
                            else{
                                $_SESSION['orca'][$id] = $_SESSION['orca'][$id] + 1; // se não for vazia eu apenas adiciono mais um
                            }
                        }//fim isset id
                    ?>
                    <?php
                        //Quando clicado no botão Alt, alterar a quantidade.
                        if(isset($_POST["alterar_newqtd"])){
                            $valor 		= intval($_POST["newqtd"]);
                            $id_produto = intval($_POST["alterar_newqtd"]);
                            echo $valor;
                            //Se carrinho estiver vazio
                            if(!empty($_SESSION["orca"]["$id_produto"])){
                                $_SESSION["orca"]["$id_produto"] = $valor ;			
                                }
                            }
                        //Quando clica em deletar produto
                        if(isset($_POST["del_produto"])){
                            $id_produto = intval($_POST["del_produto"]);
                            if(isset($_POST["del_produto"])){
                                unset ($_SESSION["orca"]["$id_produto"]);
                                }
                            }
                        //Se clicar em limpar carrinho
                        if(isset($_GET["ac"]) == "limpar"){
                            unset ($_SESSION["orca"]);
                            }	
                    ?>
                    <?php
                        //Verifica se há produtos no Orçamento se não houver mostra uma mensagem na tela.
                        if(empty($_SESSION['orca'])){
                            echo"Não Produtos no seu orçamento!</br>
                            <a href='produto.php'>Adicionar Prodtutos</a></td>";
                            }
                            //Se houver motre tudo abaixo até o fim da pagina.
                            else{
                    ?>
                        <br/>
                        <table width="620" border="0" id="tabela">
                            <tr>
                                <td width="20">#</td>
                                <td width="200">Nome</td>
                                <td colspan="2">Qtd / Descri.</td>
                                <td width="120">Vl.Unit</td>
                                <td width="120">Subtotal</td>
                                <td width="30">Del.</td>
                            </tr> 
                    
                    <?php
                        $total = 0;
                        $i = 0; 
                        foreach($_SESSION['orca'] as $k=>$v){// aki eu extrair o key e value da session
                        $i = $i + 1;
                    ?>
                        <form action="" method="post"/>
                        <?php
                             $query = $mysqli->query("SELECT * FROM cad_prod where id_prod = $k");
                             $linha = mysqli_fetch_assoc($query);
							 $descri = $linha['descri_prod'];
                             $subtotal = $linha['preco_prod'] * $v;
                             $total = $total	+ $subtotal;
                        ?>
                    
                            <tr>
                                <td><?php echo $i; ?></td>
                                <td><?php echo $linha['nome_prod']; ?></td>
                                <td width="150">
                                <input type="number" name="newqtd" value="<?php echo $v; ?>" min="1" max="999"/><?php echo " ". $descri; ?>
                                
                                
                                </td>
                                <td width="15"><input id="alterar_newqtd" type="image" name="alterar_newqtd" value="<?php echo $linha['id_prod']; ?>" src="img/ilustracao/refresh.png"/></td>
                                <td><?php echo "R$ " .$linha['preco_prod']; ?> </td>
                                <td><?php echo "R$ ". number_format ($subtotal,2,",","."); ?></td>
                                <td>
                                 <input name="del_produto" id="del_produto" type="image" value="<?php echo $linha['id_prod'];?>" src="img/ilustracao/delete.png" width="25px" height="25px"/>
                                </td>
                            </tr>
                        </form>
                        
                    <?php } ?><!-- fim do forech-->
                             <tr>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td></td>
                                <td>Total:</td>
                                <td colspan="2"><?php echo "R$ ". number_format($total,2,",","."); ?></td>
                            </tr>
                            <tr>
                            	<td colspan="7"> </td>
                            </tr>
                            <tr>
                                <td colspan="3">
                                <a id="voltar" href="produto.php">Continuar comprando</a>
                                </td>
                               	<td>|</td>
                                 <td colspan="3">
                                 <a id="limpar" href="?ac=limpar">Limpar Orçamento</a>
                                 </tr>
                            </tr>
                        </table>
                    <?php }?><!-- fim do if que verifica se há produto no carrinho-->

GOSTEI 0
Felipe

Felipe

03/10/2015

Moisés!

vou ter que fazer umas modificaçoes aqui para poder rodar este código.

minha pergunta é: voce esta conseguindo listar todos os produtos em tela com este código?

se sim,

o que vamos ter que fazer é:

*adicionar um link <a href="endereco_pagina_pdf">GERAR PDF</a>
*na pagina PDF vc vai ter que fazer o mesmo Loop que está fazendo para mostrar na tela (nunca usei foreach para imprimir no PDF, vou ter que testar aqui)
* desenha a tabela da mesma forma que está desenhando em tela
<?php
// Cria o PDF
        $mpdf=new mPDF();
	$mpdf->charset_in='windows-1252';
	$mpdf->SetDisplayMode('fullpage');
	$css = file_get_contents("css/estilo_relatorio.css");
	$mpdf->WriteHTML($css,1);

$parte1 = '
<table border=1>
<tr>
                                <td width="20">#</td>
                                <td width="200">Nome</td>
                                <td colspan="2">Qtd / Descri.</td>
                                <td width="120">Vl.Unit</td>
                                <td width="120">Subtotal</td>
                                <td width="30">Del.</td>
                            </tr> 
</table>';

$mpdf ->WriteHtml($parte1); // envia a primeira parte

//inicio do Loop

$parte2= ''; // desenha outra tabela com celulas de mesmo tamanho das da tabela anterior e faça como foi feito para listar a pagina anterior
$mpdf->WriteHTML($parte2);

// ou utilize $mpdf->WriteCell para criar celula por celula e $mpdf->Ln();  para pula uma linha

//fim do loop


$mpdf->Output("carrinho.pdf","I");

?>


vou testar o seu codigo, mas vai ficar para amanhã, hoje tenho que entregar um trabalho e nao vou ter tempo
GOSTEI 0
Moisés

Moisés

03/10/2015

Moisés!

vou ter que fazer umas modificaçoes aqui para poder rodar este código.

minha pergunta é: voce esta conseguindo listar todos os produtos em tela com este código?

se sim,

o que vamos ter que fazer é:

*adicionar um link <a href="endereco_pagina_pdf">GERAR PDF</a>
*na pagina PDF vc vai ter que fazer o mesmo Loop que está fazendo para mostrar na tela (nunca usei foreach para imprimir no PDF, vou ter que testar aqui)
* desenha a tabela da mesma forma que está desenhando em tela
<?php
// Cria o PDF
        $mpdf=new mPDF();
	$mpdf->charset_in='windows-1252';
	$mpdf->SetDisplayMode('fullpage');
	$css = file_get_contents("css/estilo_relatorio.css");
	$mpdf->WriteHTML($css,1);

$parte1 = '
<table border=1>
<tr>
                                <td width="20">#</td>
                                <td width="200">Nome</td>
                                <td colspan="2">Qtd / Descri.</td>
                                <td width="120">Vl.Unit</td>
                                <td width="120">Subtotal</td>
                                <td width="30">Del.</td>
                            </tr> 
</table>';

$mpdf ->WriteHtml($parte1); // envia a primeira parte

//inicio do Loop

$parte2= ''; // desenha outra tabela com celulas de mesmo tamanho das da tabela anterior e faça como foi feito para listar a pagina anterior
$mpdf->WriteHTML($parte2);

// ou utilize $mpdf->WriteCell para criar celula por celula e $mpdf->Ln();  para pula uma linha

//fim do loop


$mpdf->Output("carrinho.pdf","I");

?>


vou testar o seu codigo, mas vai ficar para amanhã, hoje tenho que entregar um trabalho e nao vou ter tempo



Felipe estou conseguindo sim listar todos os produtos com o Código que postei caso vc queira ver na pratica com está eu hospedei o está pagina para teste no seguinte endereço: http://manafestas.esy.es/orcamento.php
GOSTEI 0
Felipe

Felipe

03/10/2015

Abaixo posto o código da pagina em PDF com SESSION, a SESSION é um array bidimensional


altere conforme precisar, eu sugiro usar assim:

id | qtd
1 | 10
2 | 20


<?php

include("mpdf60/mpdf.php");

session_start();
$_SESSION['matriz'] = array();

//inserindo dados na session
$_SESSION['matriz']['id'][] = "1";
$_SESSION['matriz']['prod'][] = "produto1";
$_SESSION['matriz']['qtd'][] = "10";
$_SESSION['matriz']['preco'][] = "1.00";

$_SESSION['matriz']['id'][] = "2";
$_SESSION['matriz']['prod'][] = "produto2";
$_SESSION['matriz']['qtd'][] = "20";
$_SESSION['matriz']['preco'][] = "2.00";

$_SESSION['matriz']['id'][] = "3";
$_SESSION['matriz']['prod'][] = "produto3";
$_SESSION['matriz']['qtd'][] = "30";
$_SESSION['matriz']['preco'][] = "3.00";

$i = sizeof($_SESSION['vetor'],1) -4;// a quantidade de itens menos a quantidade de indices
// tanto a função sizeof quanto a count retorna todos os valores do array bidimensional inclusive os indices id, prod, qtd e preco por isso o -4

//sabendo o tamanho do array basta fazer o loop
//pode usar o FOR
//pode usar o While, não esqueça de fazer uma variavel $cont=0 antes do laço e dentro fazer $cont++
//pode usar o do{}while, nao esqueça de faze-lo dentro de um if para ver se o array nao esta vazio senao vai retornar erro, pois ao contrario de while() primeiro ele faz e depois verifica
//pode usar o foreach

   $mpdf=new mPDF();
	$mpdf->charset_in='windows-1252';
	$mpdf->SetDisplayMode('fullpage');
	$css = file_get_contents("css/estilo_relatorio.css");
	$mpdf->WriteHTML($css,1);
	$mpdf->SetTitle("Criando PDF");//titulo da pagina
	
   $mpdf->SetHeader('Página 1');//cria o cabeçalho
	$mpdf->AddPage('A4','L');// Add a pagina A4 em modo paisagem
	
//desenhando o titulo
	$mpdf->SetFont('sans-serif', 'B', 8);
	$mpdf->WriteCell(10,5,"ID",1,0,'C');
	$mpdf->WriteCell(30,5,"PRODUTO",1,0,'C');
   $mpdf->WriteCell(10,5,"QTD",1,0,'C');
   $mpdf->WriteCell(20,5,"PRECO",1,0,'C');
   
   $mpdf->Ln(6);//pula uma linha, o valor dentro do parenteses é a distancia 


$cont = 0;
$total = 0;
$produtos = 0;
//inicio do loop while
 while($cont<($i/4)){// tamanho do array dividido pela quantidade de indices

   $mpdf->SetFont('sans-serif', '', 8);
   $mpdf->WriteCell(10,3,$_SESSION['matriz']['id'][$cont],0,0,'C');
   $mpdf->WriteCell(30,3,$_SESSION['matriz']['prod'][$cont],0,0,'C');
   $mpdf->WriteCell(10,3,$_SESSION['matriz']['qtd'][$cont],0,0,'C');
   $mpdf->WriteCell(20,3,$_SESSION['matriz']['preco'][$cont],0,0,'C');
   
   $total += $_SESSION['matriz']['preco'][$cont];   
   $produtos += $_SESSION['matriz']['qtd'][$cont];    
   
   $mpdf->Ln(6);//pula uma linha, o valor dentro do parenteses é a distancia 

 $cont++;
 }//fim while
 
   $mpdf->SetFont('sans-serif', 'B', 8);
   $mpdf->WriteCell(40,5,"SUBTOTAL",1,0,'C');
   $mpdf->WriteCell(10,5,utf8_encode($produtos),1,0,'C');
   $mpdf->WriteCell(20,5,utf8_encode($total),1,0,'C');


        // Output("orcamento.pdf","F");  ---- apenas salva o PDF e nao exibe
	// Output("orcamento.pdf","D");  ---- disponibiliza o PDF para download
	// Output("orcamento.pdf","I");  ---- exibe o PDF e nao salva
   $mpdf->Output("orcamento.pdf","I");
 
 

?>
GOSTEI 1
Marcio Araujo

Marcio Araujo

03/10/2015

Me perdi aqui nos posts, você conseguiu fazer?
GOSTEI 0
Felipe

Felipe

03/10/2015

copia este ultimo codigo e salva na mesma pasta que esta a pasta mpdf60 pois o include vai procurar o mpfd dentro dela que sairá o resultado no PDF
GOSTEI 0
Felipe

Felipe

03/10/2015

Me perdi aqui nos posts, você conseguiu fazer?


Conseguiu Márcio Araujo?

sairá o seguinte resultado:
[img]http://arquivo.devmedia.com.br/forum/imagem/458083-20151021-235659.png[/img]
GOSTEI 1
Moisés

Moisés

03/10/2015

Felipe Martins, muito obrigado cara pela ajuda, vi hoje o seu post com o código, mas ontem a noite e consegui fazer usando o algorítimo e os outros codigo que vc já havia postado, mas mesmo assim testarei este código que vc postou pode ser que fique melhor do que já está, só estou com problema apenas nos acentos, e pois estão ficando com caracteres estanho, apenas no PDF, pois nas paginas estão funcionando normalmente o tipo de dados do banco é "utf-8 general ci" e no pdf em todos os caracteres com acentos, estou usando está linha de código para converter as variáveis que vem do banco $id_cli = utf8_encode($cliente['id']); e se não usar ela da erro e nem gera o pdf.

Obs.: o PDF já estou gerando com o dados o problema é apenas os caracteres.
GOSTEI 0
Felipe

Felipe

03/10/2015

Felipe Martins, muito obrigado cara pela ajuda, vi hoje o seu post com o código, mas ontem a noite e consegui fazer usando o algorítimo e os outros codigo que vc já havia postado, mas mesmo assim testarei este código que vc postou pode ser que fique melhor do que já está, só estou com problema apenas nos acentos, e pois estão ficando com caracteres estanho, apenas no PDF, pois nas paginas estão funcionando normalmente o tipo de dados do banco é "utf-8 general ci" e no pdf em todos os caracteres com acentos, estou usando está linha de código para converter as variáveis que vem do banco $id_cli = utf8_encode($cliente['id']); e se não usar ela da erro e nem gera o pdf.

Obs.: o PDF já estou gerando com o dados o problema é apenas os caracteres.


Moisés!

realmente essa parte de acentos eh bem complicadinha...

nas variaveis que vc vai escrever com WriteHtml em vez de saída vc vai escrever sa& iacute ;da

nas palavras que vc pega do Banco vc usa a função utf8_encode() //eu uso o banco utf8_swedish_ci e também dá problema, precisa usar essa função mesmo

nas palavras que vc vai escrever direto no campo como por exmplo $mpdf->WriteCell(20,5,"PREÇO",1,0,'C'); pode ser normal mesmo

se precisar de mais alguma coisa avisa aí..
GOSTEI 0
Moisés

Moisés

03/10/2015

Felipe Martins, cara muito obrigado pela ajuda, hoje consegui resolver o problema dos acentos apenas retirei o código de utf8_encode da palavras que vem do banco, assim não tive mais problemas com os acentos hoje finalizei o meu arquivo em pdf ver ai como ficou bom, também vou postar código aqui caso alguém tenha o mesmo problema possa usar-lo [img]http://arquivo.devmedia.com.br/forum/imagem/407060-20151024-224148.jpg[/img]

<!doctype html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<title>PDF</title>
</head>
<body>
<?php 
session_start();

	include("mpdf60/mpdf.php");
	include("phpconfig/conecta.php");
	
	$total = 0;
    $i = 0;
	$sp_ant = 1; 
	$date = date('d/m/Y');// busca a data
    $hora = date('H:i'); // busca a hora
	$qtd_prod = 0;
	$value_zeb = false;// inicialização do zebrado da linha, false inicia em branco true inicia em cinza
	$row = 0;



	// Cria o PDF
     $mpdf = new mPDF();
     $mpdf->SetDisplayMode('fullpage');
     $css = file_get_contents("css/pdf.css");
     $mpdf->WriteHTML($css,1);
	 $mpdf->SetTitle($titulo);//define o tiiulo da pagina --- este será exibido na aba da janela
	 
	/*foreach($_SESSION['orca'] as $k){
 		$count = $mysqli->query("SELECT COUNT(*) FROM cad_prod where id_prod = $k");
		$row = mysqli_num_rows($count);
		$qtd_prod+=$row;		
	}*/	

		$mpdf->SetHeader('<div class="direita">Data e hora de emisão: '.$date.' --- '.$hora.'</div>');//cria o cabeçalho
		$mpdf->SetHTMLFooter('<hr></hr> Atenção: *Os valores citados acima são válidos apenas enquanto durarem os nossos estoques!');// cria o rodapé
		$mpdf->AddPage('A4','L');
		
		$logo = '<img src= "img/ilustracao/logolaranja.png"/>';	
		$html = '<h3>Orçamento de Produtos para Simples Conferência</h3><br/><br/>';
				  
				$mpdf->WriteHTML($logo.$html);		
				$mpdf->WriteCell(10,$sp_ant,'Item',0, 0, 'C');
    			$mpdf->WriteCell(130,$sp_ant,'Produto',0, 0, 'C');
   				$mpdf->WriteCell(20,$sp_ant,'Qtd',0, 0, 'C');
				$mpdf->WriteCell(20,$sp_ant,'Descri.',0, 0, 'C');
    			$mpdf->WriteCell(40,$sp_ant,'Vl. Unit.',0, 0, 'C');
				$mpdf->WriteCell(40,$sp_ant,'Subtotal',0, 0, 'C');
				$mpdf->Ln($sp_ant);
				$mpdf->WriteHTML('<hr></hr>');
				$mpdf->Ln($sp_ant);
		
	//inicio do Loop
 
		foreach($_SESSION['orca'] as $k=>$v){
				$i = $i + 1;
 				$query = $mysqli->query("SELECT * FROM cad_prod where id_prod = $k");
				$linha = mysqli_fetch_assoc($query);
				$nome = $linha["nome_prod"];
				$descri = $linha["descri_prod"];
				$preco = $linha["preco_prod"];
                $subtotal = $preco * $v;
                $total = $total	+ $subtotal; 
				
// desenha zebrado
 
   if (!$value_zeb){
     $mpdf->SetFillColor(255,255,255);
     $value_zeb = true ;
   } else {
      $mpdf->SetFillColor(225,225,225);
     $value_zeb = false ;
   }   
   $mpdf->SetX(20);
   $mpdf->Cell(260,5, '',0,0,'L',true);
   $mpdf->SetX(20);				
				
				$i = utf8_encode($i++);
   				$nome = $linha["nome_prod"];
   				$descri = $linha["descri_prod"];
				$qtd = utf8_encode($v);
   				$preco = $linha["preco_prod"];
   				
                $mpdf->Ln(3);
				$mpdf->WriteCell(10,$sp_ant,$i, 0, 0, 'C');	
				$mpdf->WriteCell(130,$sp_ant,$nome, 0, 0, 'L');	
				$mpdf->WriteCell(20,$sp_ant,$qtd,0, 0, 'C');
				$mpdf->WriteCell(20,$sp_ant,$descri, 0, 0, 'C');
				$mpdf->WriteCell(15,$sp_ant,'R$: ',0, 0, 'R');	
				$mpdf->WriteCell(30,$sp_ant,number_format ($preco,2,",","."), 0, 0, 'L');
				$mpdf->WriteCell(15,$sp_ant,'R$: ',0, 0, 'R');	
				$mpdf->WriteCell(30,$sp_ant,number_format ($subtotal,2,",","."), 0, 0, 'L');
				$mpdf->Ln(3);
		}// fim do forech	
				$mpdf->WriteHTML('<hr></hr>'); 
				$mpdf->WriteCell(10,$sp_ant,'', 0, 0, 'L');	
				$mpdf->WriteCell(130,$sp_ant,'', 0, 0, 'C');	
				$mpdf->WriteCell(40,$sp_ant,'',0, 0, 'C');
				$mpdf->WriteCell(40,$sp_ant,'Total à Pagar', 0, 0, 'C');
				$mpdf->WriteCell(15,$sp_ant,'R$: ',0, 0, 'R');
				$mpdf->WriteCell(40,$sp_ant,number_format ($total,2,",","."), 0, 0, 'L');
				$mpdf->Ln(1);	
				
$mpdf->Output("pdf.php","I");
 exit;	
?>
	</body>
</html>


Podem encerrar o tópico pois o este caso está resolvido! Felipe você nota 10 Cara valeu mesmo!!!
GOSTEI 0
Marcio Araujo

Marcio Araujo

03/10/2015

Perfeito, todo o código que publicou está ok?
GOSTEI 0
Moisés

Moisés

03/10/2015

Perfeito, todo o código que publicou está ok?


Sim, Marcio o código está funcionando normalmente, caso alguém precise testar bastar alimentar a SESSION[orca].
GOSTEI 0
POSTAR