Palavra:   

Revista PHP / PHP

Alexandre Oliveira

Técnico em informática com especialização em montagem e manutenção decomputadores, Desenvolvimento de Sistemas, Comunicação de Dados, acadêmico de Desenvolvimento de Sistemas Web - CEFET-TO), conhecimentos em aplicações web... com ênfase na Linguagem PHP e banco de dados mysql.. Atualmente utilizando AJAX.

Gerando PDF com PHP

Olá leitores da Revista PHP, os comentários estão no próprio script.

PHP
  1. <?php
  2. /*
  3. Olá Amigos, hoje iremos aprender a gerar um arquivo PDF com nosso querido PHP
  4. para isso , utilizaremos a biblioteca fpdf que se encontra em - > http://www.fpdf.org/
  5.  
  6. Objetivo : gerar um arquivo PDF apartir do PHP em formato de um artigo
  7.  
  8. caso tenha alguma duvida faça o download do manual no site do fpdf
  9. já possui versões em portugues.
  10. os métodos aqui utilizados estao todos explicados no final do artigo !
  11.  
  12. bom vamos ao trabalho !
  13. */
  14. //incluindo o arquivo do fpdf
  15. require_once("fpdf/fpdf.php");
  16. //defininfo a fonte !
  17. define('FPDF_FONTPATH','fpdf/font/');
  18. //instancia a classe.. P=Retrato, mm =tipo de medida utilizada no casso milimetros, tipo de folha =A4
  19. $pdf= new FPDF("P","mm","A4");
  20. //define a fonte a ser usada
  21. $pdf->SetFont('arial','',10);
  22. //define o titulo
  23. $pdf->SetTitle("Testando PDF com PHP !");
  24. //assunto
  25. $pdf->SetSubject("assunto deste artigo!");
  26. // posicao vertical no caso -1.. e o limite da margem
  27. $pdf->SetY("-1");
  28. $titulo="Titulo do Artigo";
  29. //escreve no pdf largura,altura,conteudo,borda,quebra de linha,alinhamento
  30. $pdf->Cell(0,5,$titulo,0,0,'L');
  31. $pdf->Cell(0,5,'http://www.seusite.com.br',0,1,'R');
  32. $pdf->Cell(0,0,'',1,1,'L');
  33. $pdf->Ln(8);
  34. //hora do conteudo do artigo
  35. $pdf->SetFont('arial','',8);
  36. $novo="A Agência Nacional de Aviação Civil (Anac) informou, nesta segunda-feira (2), que vai investigar se as companhias áereas têm culpa pelos atrasos e cancelamentos registrados durante o fim de semana.
  37. No sábado (30), o percentual de vôos com mais de uma hora de atrasos chegou a 45,2%. No domingo (1º), até as 19h30, 36% dos vôos tiveram atrasos.
  38. ";
  39. //posiciona verticalmente 21mm
  40. $pdf->SetY("21");
  41. //posiciona horizontalmente 30mm
  42. $pdf->SetX("30");
  43. //escreve o conteudo de novo.. parametros posicao inicial,altura,conteudo(*texto),borda,quebra de linha,alinhamento
  44. $pdf->MultiCell(0,5,$novo,0,1,'J');
  45.  
  46. $novo="
  47. Nesta segunda-feira, a situação começou a se normalizar, mas ainda há registro de problemas. Até as 10h, dos 623 vôos previstos nos 13 principais aeroportos brasileiros, 126 tiveram atrasos de mais de uma hora, segundo balanço divulgado pela Infraero, a estatal que administra os terminais aéreos. O número equivale a 20,2% do total. Quarenta e seis decolagens foram canceladas (7,3%).
  48. Os terminais que tiveram maiores percentuais de atrasos foram os do Recife (PE) e de Fortaleza (CE). Na Capital de Pernambuco, oito dos 24 vôos marcados até as 10h atrasaram mais de uma hora (33,3% do total). No terminal cearense, oito das 25 partidas ocorreram fora
  49. O terminal que registrou maior índice de cancelamentos foi o de Curitiba (PR). Das 22 decolagens programadas, quatro foram canceladas (18,1%).
  50. A assessoria de Infraero informa que os atrasos são conseqüência dos transtornos do fim de semana. Muitos vôos tiveram que ser remarcados para o início desta semana.
  51. Previsão - O presidente da Infraero, brigadeiro José Carlos Pereira, também foi prejudicado pela crise aérea. Ele tinha uma viagem marcada de Brasília para o Rio às 7h desta segunda, mas o avião só decolou às 9h59.
  52. Apesar do transtorno, ele disse que as operações estão ocorrendo normalmente nos principais aeroportos do país e a situação deve se normalizar até as 14h.
  53. ";
  54. //posiciona verticalmente 41mm
  55. $pdf->SetY("41");
  56. //posiciona horizontalmente 10mm
  57. $pdf->SetX("10");
  58. //escreve o conteudo de novo.. parametros posicao inicial,altura,conteudo(*texto),borda,quebra de linha,alinhamento
  59. $pdf->MultiCell(0,5,$novo,0,1,'J');
  60.  
  61. //endereco da imagem,posicao X(horizontal),posicao Y(vertical), tamanho altura, tamanho largura
  62. $pdf->Image("teste.jpg", 8,20,20,20);
  63. /*******definindo o rodapé*************************/
  64. //posiciona verticalmente 270mm
  65. $pdf->SetY("270");
  66. //data atual
  67. $data=date("d/m/Y");
  68. $conteudo="criado em ".$data;
  69. $texto="por Alexandre Oliveira";
  70.  
  71. //imprime uma celula... largura,altura, texto,borda,quebra de linha, alinhamento
  72. $pdf->Cell(0,0,'',1,1,'L');
  73. //imprime uma celula... largura,altura, texto,borda,quebra de linha, alinhamento
  74. $pdf->Cell(0,5,$texto,0,0,'L');
  75. //imprime uma celula... largura,altura, texto,borda,quebra de linha, alinhamento
  76. $pdf->Cell(0,5,$conteudo,0,1,'R');
  77.  
  78.  
  79. //imprime a saida do arquivo..
  80. $pdf->Output("arquivo","I");
  81. /*
  82. agora imaginem que estes dados viessem do banco de dados ?
  83. que maravilha hein ! seus artigos convertidos em pdf dinamicamente hein?
  84. ************************************************************************
  85.  
  86. REFERENCIAS :
  87. FPDF - >Esta é o construtor da classe. Ele permite que seja definido o formato da página, a orientação e a unidade de medida usada em todos os métodos (exeto para tamanhos de fonte).
  88. utilizacao : FPDF([string orientation [, string unit [, mixed format]]])
  89.  
  90. SetFont -> Define a fonte que será usada para imprimir os caracteres de texto. É obrigatória a chamada, ao menos uma vez, deste método antes de imprimir o texto ou o documento resultante não será válido.
  91. utilizacao : SetFont(string family [, string style [, float size]])
  92.  
  93. SetTitle - >Define o título do documento.
  94. utilizacao : SetTitle(string title)
  95.  
  96. SetSubject -> Define o assunto do documento
  97. utilizacao : SetSubject(string subject)
  98.  
  99. SetX - >Define a abscissa da posição corrente. Se o valor passado for negativo, ele será relativo à margem direita da página.
  100. utilizacao : SetX(float x)
  101.  
  102. SetY - > Move a abscissa atual de volta para margem esquerda e define a ordenada. Se o valor passado for negativo, ele será relativo a margem inferior da página.
  103.  
  104. utilizacao : SetY(float y)
  105.  
  106. Cell - > Imprime uma célula (área retangular) com bordas opcionais, cor de fundo e texto. O canto superior-esquerdo da célula corresponde à posição atual. O texto pode ser alinhado ou centralizado. Depois de chamada, a posição atual se move para a direita ou para a linha seguinte. É possível pôr um link no texto.
  107. Se a quebra de página automática está habilitada e a pilha for além do limite, uma quebra de página é feita antes da impressão.
  108. utilizacao - >Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, int fill [, mixed link]]]]]]])
  109.  
  110. Ln - > Faz uma quebra de linha. A abscissa corrente volta para a margem esquerda e a ordenada é somada ao valor passado como parâmetro.
  111. utilizacao ->Ln([float h])
  112.  
  113. MultiCell - > Este método permite imprimir um texto com quebras de linha. Podem ser automática (assim que o texto alcança a margem direita da célula) ou explícita (através do caracter \n). Serão geradas tantas células quantas forem necessárias, uma abaixo da outra.
  114. O texto pode ser alinhado, centralizado ou justificado. O bloco de células podem ter borda e um fundo colorido.
  115. utilizacao : MultiCell(float w, float h, string txt [, mixed border [, string align [, int fill]]])
  116.  
  117. Image ->Coloca uma imagem na página - tipos suportados JPG PNG
  118. utilizacao : Image(string file, float x, float y [, float w [, float h [, string type [, mixed link]]]])
  119.  
  120.  
  121. Bom mais uma vez.. agradeço se for útil..
  122. qualquer dúvida: alexandre.etf@gmail.com !
  123. */
  124. ?>
www.revistaphp.com.br
Abraço a todos e até a próxima.
Alexandre

Opções de Interação

Comentários

erro na impressão...
Por: Paulo, 21/01/2010   14:20:25
Olá ! a todos...muito bacana o artigo mas quando comecei a estuda-lo percebi que no lugar do texto saia um quadrado preto então acho que encontrei a solução...Onde está escrito:

$pdf->MultiCell(0,5,$novo,0,1,'J')

subtitua por:

$pdf->Write(5, $novo);

no site da fpdf tem o manual em português e lá vocês podem tirar além dessa outras duvidas...

Ats...meu e-mail para qualquer coisa: ceodcolatina@gmail.com
res:
Por: richardson, 09/07/2009   16:45:37
na função $pdf->MultiCell(0,5,$novo,0,1,'J'); tirei os parametros... e ficou assim...
$pdf->MultiCell(0,5,$novo,'J');

hum... num entendi bem mas achou q essa parametros já estão setados no fpdf.php então não precisa passalos aqui deu certo.
function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false)
erro no texto
Por: Walter, 02/06/2009   15:29:11
funcionou direitinho, soh q o texto aparece soh um bloco preto e nao consegui arrumar... O q pode ser?
Erro ao enviar...
Por: Rafael, 10/03/2009   23:30:22
Olá. Aqui está aparecendo a seguinte mensagem de erro:

Warning: Cannot modify header information - headers already sent by (output started at /home/target-ti/www/mac/cadastro2.php:9) in /home/target-ti/www/mac/fpdf/fpdf.php on line 1017
FPDF error: Some data has already been output, can't send PDF file

Aparentemente está dando erro na hora de gerar o arquivo. Já mudei as permissões da pasta pra 0777 e nada...
erro
Por: Winston, 29/12/2008   15:19:00
sim era erro de diretorio este diretorio tem que ficar no raiz do site
res:
Por: Alexandre, 23/12/2008   17:27:57
Boa Tarde, Winston.
novamente parece que o arquivo nao foi encontrado ...
verifique se subiu direitinho os arquivos para o servidor...
erro
Por: Winston, 23/12/2008   15:01:02
boa tarde a todos olha eu denovo
eu gosteri muito deste post esta me ajudando muito so com alguma modificação a minha duvida e a seguin
no servido local esta tudo as mil maravilha mais quando eu tentei subi ele esta dando este erro quem poderia me ajudar

Warning: FPDF::include(sistema/admin/cursos/pdf/fpdf/font/helvetica.php) [function.FPDF-include]: failed to open stream: No such file or directory in /home/httpd/vhosts/abaspgo.org.br/httpdocs/sistema/admin/cursos/pdf/fpdf.php on line 550

Warning: FPDF::include(sistema/admin/cursos/pdf/fpdf/font/helvetica.php) [function.FPDF-include]: failed to open stream: No such file or directory in /home/httpd/vhosts/abaspgo.org.br/httpdocs/sistema/admin/cursos/pdf/fpdf.php on line 550

Warning: FPDF::include() [function.include]: Failed opening 'sistema/admin/cursos/pdf/fpdf/font/helvetica.php' for inclusion (include_path='.:/usr/share/pear') in /home/httpd/vhosts/abaspgo.org.br/httpdocs/sistema/admin/cursos/pdf/fpdf.php on line 550
FPDF error: Could not include font metric file
Erro ao gerar PDF
Por: Alan, 23/12/2008   09:30:48
Some data has already been output, can't send PDF file -- esta dando esta mensagem de erro na hora de gerar .. Será que você pode me dar uma ajuda.
Obrigado...
O seu artigo foi muito bacana
muito obrigado
Por: Winston, 22/12/2008   08:48:16
muito obrigado pela atenção realmente e que nao estava achando a imagem
Res:
Por: Alexandre, 17/12/2008   12:41:12
Ola Winston, provavelmente esse está dando porque ou não achou a imagem, ou nao ta habilitado a biblioteca GD