Relatórios em PDF com PHP usando a classe FPDF
Aprendi a utilizar a classe FPDF a pouco mais de 3 meses e já utilizo em todos os meus relatórios. ? uma classe simples de aprender e possibilita que você crie outros modulos e classes a partir dela.Vou demonstrar aqui como fazer um relatório um pouco mais avançado com ela. Incluindo cabeçalho, rodapé e quebra de página. Para baixar a classe você pode entrar em http://www.fpdf.org/. Lá tembém tem alguns tutoriais em inglês.
Abaixo, o código inteiramente comentado:
// PRIMEIRAMENTE: INSTALEI A CLASSE NA PASTA FPDF DENTRO DE MEU SITE. define('FPDF_FONTPATH','fpdf/font/'); // INSTALA AS FONTES DO FPDF require('fpdf/fpdf.php'); // INSTALA A CLASSE FPDF class PDF extends FPDF { // CRIA UMA EXTENS?O QUE SUBSTITUI AS FUN??ES DA CLASSE. // SOMENTE AS FUN??ES QUE EST?O DENTRO DESTE EXTENDS ? QUE SER?O SUBSTITUIDAS. function Header(){ //CABECALHO global $codigo; // EXEMPLO DE UMA VARIAVEL QUE TERÁ O MESMO VALOR EM QUALQUER ÁREA DO PDF. $l=5; // DEFINI ESTA VARIAVEL PARA ALTURA DA LINHA $this->SetXY(10,10); // SetXY - DEFINE O X E O Y NA PAGINA $this->Rect(10,10,190,280); // CRIA UM RET?NGULO QUE COME?A NO X = 10, Y = 10 E //TEM 190 DE LARGURA E 280 DE ALTURA. //NESTE CASO, ? UMA BORDA DE PÁGINA. $this->Image('logo.jpg',11,11,40); // INSERE UMA LOGOMARCA NO PONTO X = 11, Y = 11, E DE TAMANHO 40. $this->SetFont('Arial','B',8); // DEFINE A FONTE ARIAL, NEGRITO (B), DE TAMANHO 8 $this->Cell(170,15,'INSIRA SEU TEXTO AQUI',0,0,'L'); // CRIA UMA CELULA COM OS SEGUINTES DADOS, RESPECTIVAMENTE: // LARGURA = 170, // ALTURA = 15, // TEXTO = 'INSIRA SEU TEXTO AQUI' // BORDA = 0. SE = 1 TEM BORDA SE 'R' = RIGTH, 'L' = LEFT, 'T' = TOP, 'B' = BOTTOM // QUEBRAR LINHA NO FINAL = 0 = N?O // ALINHAMENTO = 'L' = LEFT $this->Cell(20,$l,'Nº '.$codigo,1,0,'C',0); // CRIA UMA CELULA DA MESMA FORMA ANTERIOR MAS COM ALTURA DEFINIDA PELA VARIAVEL $l E // INSERINDO UMA VARIÁVEL NO TEXTO. $this->Ln(); // QUEBRA DE LINHA $this->Cell(190,10,'',0,0,'L'); $this->Ln(); $l = 17; $this->SetFont('Arial','B',12); $this->SetXY(10,15); $this->Cell(190,$l,'TITULO','B',1,'C'); $l=5; $this->SetFont('Arial','B',10); $this->Cell(20,$l,'Dados 1:',0,0,'L'); $this->Cell(100,$l,'','B',0,'L'); $this->Cell(35,$l,'',0,0,'L'); $this->Cell(15,$l,'Data:',0,0,'L'); $this->Cell(20,$l,date('d/m/Y'),'B',0,'L'); // INSIRO A DATA CORRENTE NA CELULA $this->Ln(); $this->Cell(20,$l,'Dados 2:',0,0,'L'); $this->Cell(100,$l,'','B',0,'L'); $this->Ln(); $this->Cell(20,$l,'Dados 3:',0,0,'L'); $this->Cell(100,$l,'','B',0,'L'); $this->Cell(35,$l,'',0,0,'L'); $this->Cell(15,$l,'Dados 4:',0,0,'L'); $this->Cell(20,$l,'','B',0,'L'); $this->Ln(); //FINAL DO CABECALHO COM DADOS //ABAIXO ? CRIADO O TITULO DA TABELA DE DADOS $this->Cell(190,2,'',0,0,'C'); //ESPA?AMENTO DO CABECALHO PARA A TABELA $this->Ln(); $this->SetTextColor(255,255,255); $this->Cell(190,$l,'Titulo 1',1,0,'C',1); $this->Ln(); //TITULO DA TABELA DE SERVI?OS $this->SetFillColor(232,232,232); $this->SetTextColor(0,0,0); $this->SetFont('Arial','B',8); $this->Cell(10,$l,'Titulo 1',1,0,'L',1); $this->Cell(31,$l,'Titulo 2',1,0,'l',1); $this->Cell(70,$l,'Titulo 3,1,0,'L',1); $this->Cell(12,$l,'Titulo 4',1,0,'C',1); $this->Cell(12,$l,'Titulo 5',1,0,'C',1); $this->Cell(40,$l,'Titulo 6',1,0,'C',1); $this->Cell(15,$l,'Titulo 7',1,0,'C',1); $this->Ln(); } function Footer(){ // CRIANDO UM RODAPE $this->SetXY(15,280); $this->Rect(10,270,190,20); $this->SetFont('Arial','',10); $this->Cell(70,8,'Assinatura ','T',0,'L'); $this->Cell(40,8,' ',0,0,'L'); $this->Cell(70,8,'Assinatura','T',0,'L'); $this->Ln(); $this->SetFont('Arial','',7); $this->Cell(190,7,'Página '.$this->PageNo().' de {nb}',0,0,'C'); } } //CONECTE SE AO BANCO DE DADOS SE PRECISAR include("config.php"); // A MINHA CONEX?O FICOU EM CONFIG.PHP $pdf=new PDF('P','mm','A4'); //CRIA UM NOVO ARQUIVO PDF NO TAMANHO A4 $pdf->AddPage(); // ADICIONA UMA PAGINA $pdf->AliasNbPages(); // SELECIONA O NUMERO TOTAL DE PAGINAS, USADO NO RODAPE $pdf->SetFont('Arial','',8); $y = 59; // AQUI EU COLOCO O Y INICIAL DOS DADOS $sql = "select * from tabela"; //SELECAO DOS DADOS QUE IR?O PRO PDF $result = mysql_query($sql); $l=5; // ALTURA DA LINHA while($row = mysql_fetch_array($result)) { // ENQUANTO OS DADOS V?O PASSANDO, O FPDF VAI INSERINDO OS DADOS NA PAGINA $dados1 = $row["0"]; $dados2 = utf8_decode($row["1"]); // NESTE CASO, EU DECODIFIQUEI OS DADOS, POIS ? UM CAMPO DE TEXTO. $dados3 = $row["2"]; $dados4 = $row["3"]; $dados5 = $row["4"]; $dados6 = $row["5"]; $dados7 = $row["6"]; $l = 5 * contaLinhas($dados2,48); // Eu criei a função "contaLinhas" para contar quantas linhas um campo pode conter se tiver largura = 48 if($y + $l >= 230){ // 230 ? O TAMANHO MAXIMO ANTES DO RODAPE $pdf->AddPage(); // SE ULTRAPASSADO, ? ADICIONADO UMA PÁGINA $y=59; // E O Y INICIAL ? RESETADO } //DADOS $pdf->SetY($y); $pdf->SetX(10); $pdf->Rect(10,$y,70,$l); $pdf->MultiCell(70,6,$dados2,0,2); // ESTA ? A CELULA QUE PODE TER DADOS EM MAIS DE UMA LINHA $pdf->SetFont('Arial','',6); $pdf->SetY($y); $pdf->SetX(20); $pdf->Rect(20,$y,31,$l); $pdf->MultiCell(31,6,$dados1,0,2); $pdf->SetY($y); $pdf->SetX(51); $pdf->Rect(51,$y,10,$l); $pdf->MultiCell(10,5,$dados3,0,2); $pdf->SetY($y); $pdf->SetX(121); $pdf->Rect(121,$y,12,$l); $pdf->MultiCell(12,6,$dados4,0,2,'C'); $pdf->SetY($y); $pdf->SetX(133); $pdf->Rect(133,$y,12,$l); $pdf->MultiCell(12,6,$dados5,0,2,'C'); $pdf->SetY($y); $pdf->SetX(145); $pdf->Rect(145,$y,40,$l); $pdf->MultiCell(40,6,$dados6,0,2,'C'); $pdf->SetY($y); $pdf->SetX(185); $pdf->Rect(185,$y,15,$l); $pdf->MultiCell(15,6,$dados7,0,2,'C'); $pdf->Ln(); $y += $l; } mysql_close(); // FECHA A CONEX?O COM MYSQL $pdf->Output(); // IMPRIME O PDF NA TELA Header('Pragma: public'); // ESTA FUN??O ? USADA PELO FPDF PARA PUBLICAR NO IE
/* Editado em 12/04/2013 */
Atendendo à vários pedidos, eis a Função contaLinhas();
/* Fim da Edição */
Comentem e/ou tirem suas dúvidas por e-mail.
Até o proximo post!
Muito boa a sua dica.
Valeu
Valeu Henrique, era o que eu tava procurando, já mexi há muito tempo com a Classe FPDF, mas não lembrava absolutamente nada, e encontrei aqui o que eu precisava... Muito obrigado.
boa dica Henrique, mas função contaLinhas() não está declarada. Como ela funciona? Valeu.
boa dica Henrique, mas função contaLinhas() não está declarada. Como ela funciona? Valeu.
Pessoas,
A função de contar linhas é o seguinte. Você informa quantos caracteres deseja por linha e ele divide o número de caracteres existentes por este número para saber quantas linhas serão necessárias.
Abraços
mais nao entendi muito bem a funçâo contalinhas() pode me ayuda como ela que funciona?
obrigado
Como resolver esse problema abaixo?
Fatal error: Call to undefined function: contalinhas() in...
Pessoas,
Sobre os comentários da função ContaLinhas():
Esta função é uma função que eu mesmo criei. Se vocês pretendem utiliza-la é simples. Ela simplesmente recebe um texto uma largura. Depois ele divide o número de caracteres existentes no texto por esta largura para saber quantas linhas serão necessárias no campo.
O número de linhas deste campo será utilizado para criar o retângulo em volta dele.
Não é uma função obrigatória ok. É utilizada somente para isso.
Abraços
Cara, PERFEITO
Mastigadinho... mto bom pra quem ta começando
Caro Henrique.
O tutorial é muito bom.
Mas dá erro
Veja: FPDF error: Some data has already been output, can't send PDF file
O que pode ser.
No aguardo
Amigo "Anônimo"...
Alguma informação que você está tentando escrever no pdf não está sendo aceita.
Seria bom verificar as informações que está tentando enviar.
Se for melhor pra você, poste aqui o seu cósigo e podemos analisar juntos.
Abraço
tem quantos metodos?
Amigo "Anônimo"...
Não entendi muito bem o valor de sua pergunta.
Pode ser mais claro sobre a importância da quantidade de métodos de uma classe?
Opa, preciso de ajuda e gostei do seu script, mas minha duvida está no seguinte, tenho um cadastro de protudos onde tenho a referencia do produto, e o nome da foto dele, consigo gerar uma lista formatada com uma coluna referencia e uma coluna o nome da foto e outra com a foto. Até ai tranquilo, preciso que gere um uma pagina pdf essa lista mas em 3 colunas, só com a foto e a referencia logo abaixo, tipo um catalogo de produtos. Pensei em uma "matriz" de 6 linhas por 5 colunas com os dados dentro, mas nao consigo gerar isso...
Olá Edinho,
Fiz um relatório assim já.
O que você terá que fazer é modelar suas prórias páginas dentro de uma página só:
- Você terá que utilizar a largura dos campos fixa. $largura;
- utilize uma variável para contar a linha atual, quando esta variável chegar ao tamanho da página, você volta para $pos_y = 0 e $pos_x = $pos_x + $largura;
- Se a coluna for a terceira, então você terá que utilizar a função $pdf->AddPage();
Bom... tentei explicar como fiz, qualquer coisa, estarei aqui!
Obrigado!
OLÃ jovem,comigo acontece o seguinte erro hora que eu xamooarquivo
Notice: Undefined offset: 1 in C:\aaa\aaa\aaa\bibliotecas\fpdf\fpdf.php on line 1494
OLÃ jovem,comigo acontece o seguinte erro hora que eu xamooarquivo
Notice: Undefined offset: 1 in C:\aaa\aaa\aaa\bibliotecas\fpdf\fpdf.php on line 1494
Eduardo,
O erro é interno à sua biblioteca FPDF, não estando explÃcito na mensagem que você enviou, podendo variar de versão para versão do FDPF. Seria útil você verificar esta linha do arquivo fpdf.php e enviá-la. Assim eu conseguiria verificar mais facilmente o problema.
este é o seeu código que eu adaptei uma consulta a ele...
http://pastebin.com/2b4g3fNN
a mensagem que ele me retorna quando chamo esse código
Notice: Undefined offset: 1 in C:\aaaa\aaa\aaa\bibliotecas\fpdf\fpdf.php on line 1494
FPDF error: Some data has already been output, can't send PDF file
e a seguir o código que está na linha que o erro se refere...
http://pastebin.com/AABqd8Ph
eu comentei a linha 1494, é a primeira dentro do ELSE
Agradeço Muito pela Atenção Obrigado...Aguardo
Eduardo,
Não consegui descobrir exatamente o que pode ser, mas pelo que procedeu no código que você enviou, parece algo que acontece quando exibe a paginação no rodapé.
Tente comentar esta parte do código e veja se o erro persiste. Baixe uma versão mais antiga da biblioteca em http://fpdf.org e veja se ainda continua errado.
No exemplo passado neste post foi utilizado a versão 1.53.
Me diga o resultado ok!
Até mais
Sim, vou estar testando aqui, e até baixando uma versão mais antiga dela, pois a que estou trabalhando senão me engano é a mais recente...jaja eu volto pra dizer Obrigado
Olá Henrique, baxei a versão que vc utilza no tuto a 1.53, no entanto os erros persistem inclusive os anteriores veja
Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\xampp\htdocs\boletim_colegio\bibliotecas\fpdf\fpdf.php on line 910
Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\xampp\htdocs\boletim_colegio\bibliotecas\fpdf\fpdf.php on line 923
Notice: Undefined offset: 1 in C:\xampp\htdocs\boletim_colegio\bibliotecas\fpdf\fpdf.php on line 1124
Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\xampp\htdocs\boletim_colegio\bibliotecas\fpdf\fpdf.php on line 1165
Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\xampp\htdocs\boletim_colegio\bibliotecas\fpdf\fpdf.php on line 1203
FPDF error: Some data has already been output, can't send PDF file
até cheguei a ativar o magic_quotes_runtime mas sem exito
Quando disse que tentei ativar o magic_quotes_runtime, foi no aquivo da pasta do php, em PHP.INI não sei ao certo se tem algo a ver....
Quando disse que tentei ativar o magic_quotes_runtime, foi no aquivo da pasta do php, em PHP.INI não sei ao certo se tem algo a ver....
Nossa cara eu devo ta enxendo o saco já kkk mas que estou fazendo pra 1 trabalho coisa séria daà o apavvoro....
eu troquei a versão novamente agora pra 1.6 todos os erros referente ao get_magic_quotes_runtime e set_quotes_runtime foram resolvidos porém este permanece
Notice: Undefined offset: 1 in C:\xampp\htdocs\boletim_colegio\bibliotecas\fpdfv16\fpdf.php on line 1417
FPDF error: Some data has already been output, can't send PDF file
se puder me ajudar fico grato
este foi resolvido
Notice: Undefined offset: 1 in C:\xampp\htdocs\boletim_colegio\bibliotecas\fpdfv16\fpdf.php on line 1417
na linha do erro coloquei um ISSET pois nela não existia
$l=isset($this->links[$pl[4]]);
agora este eu não faço idéia de como arruma
FPDF error: Some data has already been output, can't send PDF file
não ha espaços em branco nem no inicio nem no fim do código...i ele não abre
Eduardo,
Dei uma estudada rápida aqui e ainda não consegui identificar o que realmente pode ser.
Fiz o seguinte... troquei os seus dados de conexão por texto e tudo funcionou. Tente verificar se dentro das informações que serão impressas a partir do banco contém aspas simples ou duplas, ou se contém conteúdo html.
Eduardo,
Qualquer coisa, tente entrar em contato diretamente com o site fpdf.org.
Salve jovem, muito obrigado pela sua força, tem sido muito util, venho informar que consegui corrigir o erro esta no INCLUDE da conexao, eu a fiz direto no arquivo ai ele abre, só que no documento ele só me mostra as bordas e a imagem, porque orestante não é mostrado?
Desde ja´Muitoo Obrigado
Opa Henrique, o seu tutorial me ajudou bastante, mas estou com um problema. Eu puxo dados do banco postgres sendo que tenho que gerar pdf com até 200 mil linhas do banco em uma só string, para isso entendo que tenho que quebrá-lo ou esvaziar o buffer para ser gerado uma determinada quantidade no browser, como posso fazer para que ele gere vários pdfs em uma chamada só?
Matheus, eu ainda não experimentei o FPDF com grande volume de dados. O que posso concluir é que você está certo em quebrar o texto em vários, porém não sei dizer qual a melhor forma para quebrar tanta informação e gerar o pdf em tela.
Talvez o melhor seja gerar para Download.
Para isso você pode utilizar:
$pdf->Output('nomedoarquivo.pdf','D');
Espero ter ajudado.
Otimo tuto, parabens. Estou com uma duvida, quero colocar o relatorio no estilo zebra, ou seja cor sim, cor nao. Mas ja rodei a ainda nao consegui poderia me ajudar?
Otimo tuto, parabens. Estou com uma duvida, quero colocar o relatorio no estilo zebra, ou seja cor sim, cor nao. Mas ja rodei a ainda nao consegui poderia me ajudar?
Obrigado novamente pelo tuto. Ja consegui dessifrar o misterio segue o exemplo para deixa a celula colorida:
//Novo objeto PDF
$pdf = new Documento1('P','pt','A4');
//Add Pagina
$pdf->AddPage();
$pdf->AliasNbPages();
$pdf->SetFont('Arial','B',10);
$pdf->Cell(540,10,'_______________________________________________________________________________________________',0,0,'L');
$pdf->Ln(20);
//Criando Cabecalho da tabela
$pdf->Cell(20,10,'Cod',0,0,'C');
$pdf->Cell(100,10,'Nome',0,0,'L');
$pdf->Cell(100,10,'Sobre Nome',0,0,'L');
//Povoando a Tabela
for($x=1;$x<100;$x++){
$pdf->Ln(10);
$pdf->Cell(20,10,$x,0,0,'C');
$pdf->Cell(100,10,'x',0,0,'L');
$pdf->Cell(100,10,'xx',0,0,'L');
$pdf->Ln(10);
$x=$x+1;
$pdf->SetFillColor(192,192,192);//Deixa o fundo da celula colorido
$pdf->Cell(20,10,$x,0,0,'C',1);
$pdf->Cell(100,10,'Y',0,0,'L',1);
$pdf->Cell(100,10,'YY',0,0,'L',1);
}
$pdf->OutPut();
Excelente Thiago,
Vale lembrar que existem outras formas de se criar um formulário zebrado.
Até
Usei o seu código para gerar um relatório que estou fazendo. Na query que seleciona os dados do meu banco de dados, quando faço select *, tudo bem, os dados aparecem no relatório, mas quando tento selecionar entre duas datas usando o comando BETWEEN $vardata1 and $vardata2 o relatório não me traz os dados, o relatório aparece mas sem registros. No meu BD o campo está como data no formato yyyy-mm-dd.
Olá Rogério,
Pode ser apenas um erro no seu script sql. Tente colocar as datas entre aspas simples, ex: Select * form tabela where data between '$data1' and '$data2'.
O formato da data não interfere para que ela apareça, apenas interfere no formato mostrado na tela.
Até mais!
Henrique... 2 perguntas.. quer fazer sub grupos com totalizador.. e a cada novo cabeçalho quero incluir om campo do select... como faço?
manjo pouco....
outro problema... os dados de uma celular está sobrepondo a outra... como limito a exibição?
Ricardo,
Você pode criar uma função para gerar os subgrupos que deseja, limitando pelo tamanho e o espaço referidos de cada página.
E para não sobrepor células é necessário que o tamanho da célula seja maior que o texto que ela exibe. Você também pode calcular este tamanho com funções.
Até!
outro problema... os dados de uma celular está sobrepondo a outra... como limito a exibição?
Certo Henrique...
mas o valor da celula é variavel pode ter até 60 caracteres, mas so quero que mostre o tamanho até o tamanho da celula de 30 por exemplo... mas vou ver o que faço.. vlw..
Ricardo,
Você pode utilizar a função substr na variável.
Ex.:
$var = substr($valor, 0 , 30);
$pdf->Cell($x, $alt, $valor, 0, 0, 'L');
Este exemplo pega os 30 primeiros caracteres da variável.
Até!
Olá! Eu listo um relatório contas a pagar e queria abaixo dos valores tipo Valor 1,2 ,3 abaixo do 3, por exemplo aparecer o total desses valores, ou seja o valor total de contas a pagar. Tem como?
Olá! Eu listo um relatório contas a pagar e queria abaixo dos valores tipo Valor 1,2 ,3 abaixo do 3, por exemplo aparecer o total desses valores, ou seja o valor total de contas a pagar. Tem como?
Olá! Eu listo um relatório contas a pagar e queria abaixo dos valores tipo Valor 1,2 ,3 abaixo do 3, por exemplo aparecer o total desses valores, ou seja o valor total de contas a pagar. Tem como?
Tem sim Mel,
Crie uma variável somando os valores linha à linha, e na ultima linha escreva os dados.
o que faço com caracteres especiais.... Ex: á,à , é, è, ç .... Eles aparecem uns sÃmbolos....
Olá Tynha,
O FPDF usa codificação padrão ISO-8859-1 ou Windows-1252. Porém você pode utilizar a função utf8_decode() para converter os acentos.
Ex.:
$str = utf8_decode($str);
Porém alguns caracteres não são traduzidos corretamente. Se a extenção "iconv" estiver habilitada, utilize:
$str = iconv('UTF-8', 'windows-1252', $str);
Iai cara otimo tuto, queria ver se vc pode me ajudar tenho to tentando fazer algo semelhante, e que tenho uma table no BD (PHPMyAdmin), ai tenho uma pagina de pesquisa (que ira pesquisar e retornar um relatorio em forma de PDF) só que nao estou conseguindo elabora o meu script para que eu consiga realizar esse relatorio, se crio o schipt na paginha que tem o formulario de pesquisa ou se crio o script em uma nova pagina que ira receber os valores da pesuisa?? Por favor cara da uma força aee^^ to desesperado se quiser posto os meus script's. aguardo uma resposta
Iai cara otimo tuto, queria ver se vc pode me ajudar tenho to tentando fazer algo semelhante, e que tenho uma table no BD (PHPMyAdmin), ai tenho uma pagina de pesquisa (que ira pesquisar e retornar um relatorio em forma de PDF) só que nao estou conseguindo elabora o meu script para que eu consiga realizar esse relatorio, se crio o schipt na paginha que tem o formulario de pesquisa ou se crio o script em uma nova pagina que ira receber os valores da pesuisa?? Por favor cara da uma força aee^^ to desesperado se quiser posto os meus script's. aguardo uma resposta
Olá ROQ,
Se sua dúvida é sobre onde alocar os scripts, é melhor você fazer uma análise geral em todo o código e verificar o que é melhor para o seu projeto. Existem várias maneiras de se programar e de organizar um código fonte. Precisaria de muitos detalhes para poder lhe ajudar.
Me envie um e-mail pelo formulário de contato e veremos o que pode ser feito.
Att..
Ok valeu cara irei mandar sim o e-mail.Abraçç boa tarde ai para ti.
Ok valeu cara irei mandar sim o e-mail.Abraçç boa tarde ai para ti.
1º - muito bom seu tutorial só fiz uma midificação
troquei
if($y + $l >= 230){
$pdf->AddPage();
$y=59;
}
por isso
if($pdf->GetY() >= 180){
$pdf->AddPage();
}
eu to unsado 180 pois utilizo paisagem
uma coisa que não funcionou nem a pau no meu aqui o footer
tem alguma dica pra passar?
Oi Marcos,
Pela adaptação que você fez, tente modificar o Y do footer também. Talvez seja isso.
OLá Henrique parabéns mais uma vez, o post realmente tem ajudado muita gente e eu sou um deles, minha dúvida é como gerar o relatório por meio de uma váriavel ainda não definida, passada por um GET ou POST, gostaria de definir valores e após isso eu geraria o relatório, desde já obrigado pela compreenção.
Olá Ranieri,
Não vejo muita dificuldade em fazer isso.
Receba as variáveis e trate-as antes de montar o PDF.
Você pode fazer isso em qualquer parte antes de chamar as funções relativas ao PDF.
Muito bom o seu codigo!
Fatal error: Call to undefined function contaLinhas()
Aparece esta mensagem podes me ajudar a resolver ?
Muito bom o seu codigo!
Fatal error: Call to undefined function contaLinhas()
Aparece esta mensagem podes me ajudar a resolver ?
Cesar,
Esta função é uma função9 que fiz aqui para contar quantas linhas irei precisar para colocar meu texto com x caracteres, quando eu uso y caracteres por linha.
Você pode ignora-la ou criá-la como desejar.
Olá Henrique, aqui também dá erro na contalinhas e no $dados...
Estou querendo montar relatórios da seguinte forme:
Select * from aluno order by nome (vai trazer o nome, id, data nasc, turma, por exemplo).
Select * from turmas order by descricao(vai trazer as turmas com a descrição, id, por exemplo).
Select * from matriculas (vai trazer as informações de matriculas, por exemplo).
E assim por diante, porém ao colocar a minha query dá erro, se puder me ajudar.
Olá Henrique, aqui também dá erro na contalinhas e no $dados...
Estou querendo montar relatórios da seguinte forme:
Select * from aluno order by nome (vai trazer o nome, id, data nasc, turma, por exemplo).
Select * from turmas order by descricao(vai trazer as turmas com a descrição, id, por exemplo).
Select * from matriculas (vai trazer as informações de matriculas, por exemplo).
E assim por diante, porém ao colocar a minha query dá erro, se puder me ajudar.
Olá Henrique, aqui também dá erro na contalinhas e no $dados...
Estou querendo montar relatórios da seguinte forme:
Select * from aluno order by nome (vai trazer o nome, id, data nasc, turma, por exemplo).
Select * from turmas order by descricao(vai trazer as turmas com a descrição, id, por exemplo).
Select * from matriculas (vai trazer as informações de matriculas, por exemplo).
E assim por diante, porém ao colocar a minha query dá erro, se puder me ajudar.
Claiton,
Tente utilizar o nome dos campos no lugar de *.
Gostaria muito dessa função contalinhas , não consigui fazer
de jeito nenhum
Olá, estou fazendo um relatório utilizando a classe fpdf e consegui exibir os dados( nome, email, telefone0 porem, preciso que seja exibida a foto armazenada no banco de dado que armazena o nome exemplo( 1d1a7989a100839fa0300227f56d3947.jpeg) e a imagem (real) fica na pasta uploads. Existe como fazer a impressao da imagem utilizando a classe FPDF. fiz busca na net hoje o dia inteiro mas não encontrei nada.
Atenciosamente Wagner Gilberto
Olá Wagner,
Você pode inserir imagens do tipo jpg, gif e png.
A função especÃfica é Image. Você ver mais sobre isso no link http://fpdf.org/en/doc/image.htm.
Cristina,
Fiz uma matéria só sobre esta função. Você pode ler mais sobre em http://henriquecorrea.com/news/Funcao-Contar-Linhas
Obrigado!
Henrique, boa tarde
Estou com dificuldade para fazer o seguinte enviar um variavel junto para o servidor.
$pdf->Cell(30,5, $NroRES,'','B','C');
$pdf->ln(25);
$pdf->SetY(+53);
$pdf->Cell(55);
$pdf->ln(9);
$pdf->Output('Temp/$NroRES._Postagem_Correio.pdf','F');
$pdf->Output($NroRES.'_Postagem_Correio.pdf','D');
Sera que pode ajudar-me . obrigada
Cleusa,
Não entendi muito bem o que você quis dizer... Pode explicar melhor?
olá, queria saber como a função conta linhas e se vc poderia mandar um exemplo para mim ..
obg :)
Olá Nicole,
O link para a função está no post!
Henrique, você já usou a classe mPDF? Se sim, funcionou no scriptcase? Estou querendo mudar tipo de fonte, colocar sumário etc e li que a mPDF faz isso melhor ...
Olá Ãlvaro,
Ainda não conheço esta classe.
Muito bom seria legal se você deixar disponivel a tabela do mysql pra gente testar aqui!
Está de parabéns!
Muito claro e objetivo, vai ajudar muito. Gostaria de uma ajuda. Como colocar uma variavel (matricula Id) como marca d'agua diagonal por exemplo em um arquivo pdf já escrito, de modo a abrir apenas leitura, colocar o id do usuário como marca d'agua e permitir a impressão desse arquivo. Obrigado, Já valeu.
Lucivaldo,
Não disponibilizei o banco pois é apenas um teste mesmo que fiz. Para testar, você pode criar apenas variáveis e depois incorporar uma base de dados de uma forma mais cabÃvel ao seu código.
Att..
Edmundo,
Você pode colocar a matrÃcula com uma cor de fonte mais clara, mas para colocar na diagonal não conheço opção.
Henrique, desculpa ressuscitar esse tópico! Você poderia me ajudar mostrando como fazer um código enxuto para uma Grid Zebrada? Vi que tem um exemplo acima de um colega, mas achei confuso.
Grato.
Consegui!
for($i=1;$i<=10;$i++){
$pdf->SetFillColor(220,220,220);
$pdf->Cell(190,5,'Dados sobre despesas... '.$i,0, 1, 'C', 1);
$pdf->SetFillColor(20,225,160);
$pdf->Cell(190,5,'Dados sobre despesas... '.$i,0, 1, 'C', 1);
}
Mas o exemplo acima vai sempre duplicar os mesmos dados! :( Sugestões?
Fred,
Crie um contador de linha. Se a divisao dele for exata, pinte o fundo de uma cor. Caso contrario, pinte de outra cor.
Essa é a forma simples de fazer isso.
Muito boa essa dica
Olá eu tenho um arquivo .doc de um contrato a ser gerado através do preenchimento de um formulário pelo usuário dados estes salvos em um banco de dados mysql. Então eu preciso escrever os dados obtidos no formulário pelo usuário e salvar em PDF alguém teria uma sugestão de como fazer essa aplicação?
att.
Ivan,
Pode usar o FPDF pra isso. É bem simples.
Existem muitas outras informações sobre o FPDF que em breve vou postar aqui no site também. Estou preparando outros tutoriais.
Gostei da ideia.. mas tipo.. se meu formulario for complexo, tipo um certificado, com marca dágua, assinaturas. Da pra aplicar isso??
Tow com uma demanda urgente, e ate gostaria de contratar alguem pra gerar um relatorio personalizado que seja gerado visuLIZADO na tela com botão pra pdf e pra excel. Vc presta serviços assim.. Se positivio, faz contato.. pra fecharmos um orçamento. Obrigado
Marcio,
Isso é possÃvel sim e bem simples de implementar.
Entrarei em contato por e-mail.
Att..
function contaLinhas($value, $maxChars) {
]*>[\w\W]*?<\/head>[\n\r]*/i", '', $value);$isBigger = false;
$value = preg_replace("/
$value = preg_replace("/]*>[\n\r]*/i", '', $value);
$value = preg_replace("/
Deixe sua opnião