Criar arquivos em pdf com php

03/10/2015

0

PHP

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

Responder

Post mais votado

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>";
 }

Felipe

Felipe
Responder

Mais Posts

17/10/2015

Moisés

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.
Responder

19/10/2015

Moisés

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..
Responder

19/10/2015

Felipe

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
Responder

19/10/2015

Moisés

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.
Responder

19/10/2015

Moisés

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-->

Responder

20/10/2015

Felipe

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
Responder

20/10/2015

Moisés

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
Responder

21/10/2015

Felipe

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");
 
 

?>
Responder

21/10/2015

Marcio Araujo

Me perdi aqui nos posts, você conseguiu fazer?
Responder

21/10/2015

Felipe

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
Responder

21/10/2015

Felipe

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]
Responder

22/10/2015

Moisés

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.
Responder

22/10/2015

Felipe

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í..
Responder

24/10/2015

Moisés

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!!!
Responder

25/10/2015

Marcio Araujo

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar