Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

miromalc

[Resolvido] Gerar arquivo .pdf com fpdf

Recommended Posts

Bom dia pessoal, estou tentando aprender como gerar um arquivo .pdf com o PHP+Mysql mas estou encontrando dificuldades, gostaria se possível da ajuda de vocês.

Segui esse tutorial: Clique aqui

Mas está gerando esse erro:

Warning: require_once(../c:/xammp/htdocs/Novo Site/fpdf/fpdf.php) [function.require-once]: failed to open stream: Invalid argument in C:\xampp\htdocs\Novo Site\fpdf\pdf.php on line 42

Fatal error: require_once() [function.require]: Failed opening required '../c:/xammp/htdocs/Novo Site/fpdf/fpdf.php' (include_path='.;C:\xampp\php\pear\') in C:\xampp\htdocs\Novo Site\fpdf\pdf.php on line 42

 

Segue o código para que se possível analizassem e como corrigir o erro.

Pagina pdf.php

<?
//CONFIGURAÇÕES DO BD MYSQL
$servidor = "localhost";
$usuario = "root";
$senha = "";
$bd = "produtos";
//TÍTULO DO RELATÓRIO
$titulo = "Colunistas do iMasters";
//LOGO QUE SERÁ COLOCADO NO RELATÓRIO
$imagem = "mecanica_novo.png";
//ENDEREÇO DA BIBLIOTECA FPDF
$end_fpdf = "c:/xammp/htdocs/Site/fpdf";
//NUMERO DE RESULTADOS POR PÁGINA
$por_pagina = 13;
//ENDEREÇO ONDE SERÁ GERADO O PDF
$end_final = "artigo_php.pdf";
//TIPO DO PDF GERADO
//F-> SALVA NO ENDEREÇO ESPECIFICADO NA VAR END_FINAL
$tipo_pdf = "F"; 
//CONECTA COM O MYSQL
$conn = mysql_connect($servidor, $usuario, $senha);
$db = mysql_select_db($bd, $conn);
$sql = mysql_query("SELECT A.ID, A.NOME, A.ASSUNTO FROM colunistas A", $conn);
$row = mysql_num_rows($sql);

//VERIFICA SE RETORNOU ALGUMA LINHA
if(!$row) { echo "Não retornou nenhum registro"; die; }

//CALCULA QUANTAS PÁGINAS VÃO SER NECESSÁRIAS
$paginas = ceil($row/$por_pagina);

//PREPARA PARA GERAR O PDF
define("FPDF_FONTPATH", "$end_fpdf/font/");
require_once("../$end_fpdf/fpdf.php");
$pdf = new FPDF();

//INICIALIZA AS VARIÁVEIS
$linha_atual = 0;
$inicio = 0;

//PÁGINAS
for($x=1; $x<=$paginas; $x++) {

//VERIFICA
$inicio = $linha_atual;
$fim = $linha_atual + $por_pagina;
if($fim > $row) $fim = $row;

$pdf->Open();
$pdf->AddPage();
$pdf->SetFont("Arial", "B", 10);
$pdf->Image($imagem, 0, 8);
$pdf->Ln(2);
$pdf->Cell(185, 8, "Página $x de $paginas", 0, 0, 'R');

//QUEBRA DE LINHA
$pdf->Ln(20);

//MONTA O CABEÇALHO
$pdf->Cell(15, 8, "", 1, 0, 'C');
$pdf->Cell(85, 8, "COLUNISTA", 1, 0, 'L');
$pdf->Cell(85, 8, "ASSUNTO", 1, 1, 'L');

//EXIBE OS REGISTROS
for($i=$inicio; $i<$fim; $i++) {
$pdf->Cell(15, 8, mysql_result($sql, $i, "ID"), 1, 0, 'C');
$pdf->Cell(85, 8, mysql_result($sql, $i, "NOME"), 1, 0, 'L');
$pdf->Cell(85, 8, mysql_result($sql, $i, "ASSUNTO"), 1, 1, 'L');
$linha_atual++;
}//FECHA FOR(REGISTROS - i)
}//FECHA FOR(PAGINAS - x)

//SAIDA DO PDF
$pdf->Output("$end_final", "$tipo_pdf");
?>

 

Agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que usou o .. (voltar 1 nivel na estrutura de diretórios) se usou um caminho completo?

Retire-o...(a barra também -.-).

Ficando:

require_once "$end_fpdf/fpdf.php";
Não encorajo esse tipo de prática...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que usou o .. (voltar 1 nivel na estrutura de diretórios) se usou um caminho completo?

Retire-o...(a barra também -.-).

Ficando:

require_once "$end_fpdf/fpdf.php";
Não encorajo esse tipo de prática...

 

Consegui resolver eibon, o erro que você citou foi descuido e ja havia retirado, mesmo assim obrigado.

eliminei os caminhos completos que você referiu e resolveu o problema, segue o código para se alguem tiver dúvida.

<?
//CONFIGURAÇÕES DO BD MYSQL
$servidor = "localhost";
$usuario = "root";
$senha = "";
$bd = "produtos"; //mudei o BD
//TÍTULO DO RELATÓRIO
$titulo = "Colunistas do iMasters";
//LOGO QUE SERÁ COLOCADO NO RELATÓRIO
$imagem = "logo_imasters.jpg";
//ENDEREÇO DA BIBLIOTECA FPDF
$end_fpdf = "fpdf"; //deixei direto a pasta que fica na raiz do site
//NUMERO DE RESULTADOS POR PÁGINA
$por_pagina = 13;
//ENDEREÇO ONDE SERÁ GERADO O PDF
$end_final = "artigo_php.pdf"; // Gera o arquivo na raiz do site
//TIPO DO PDF GERADO
//F-> SALVA NO ENDEREÇO ESPECIFICADO NA VAR END_FINAL
$tipo_pdf = "F";
//CONECTA COM O MYSQL
$conn = mysql_connect($servidor, $usuario, $senha);
$db = mysql_select_db($bd, $conn);
$sql = mysql_query("SELECT A.ID, A.NOME, A.ASSUNTO FROM colunistas A", $conn);
$row = mysql_num_rows($sql);

//VERIFICA SE RETORNOU ALGUMA LINHA
if(!$row) { echo "Não retornou nenhum registro"; die; }

//CALCULA QUANTAS PÁGINAS VÃO SER NECESSÁRIAS
$paginas = ceil($row/$por_pagina);

//PREPARA PARA GERAR O PDF
define("FPDF_FONTPATH", "$end_fpdf/font/");
//require("$end_fpdf/fpdf.php"); // Aqui ficou como estava
require_once("$end_fpdf/fpdf.php");
$pdf = new FPDF();

//INICIALIZA AS VARIÁVEIS
$linha_atual = 0;
$inicio = 0;

//PÁGINAS
for($x=1; $x<=$paginas; $x++) {

//VERIFICA
$inicio = $linha_atual;
$fim = $linha_atual + $por_pagina;
if($fim > $row) $fim = $row;

$pdf->Open();
$pdf->AddPage();
$pdf->SetFont("Arial", "B", 10);
$pdf->Image($imagem, 0, 8);
$pdf->Ln(2);
$pdf->Cell(185, 8, "Página $x de $paginas", 0, 0, 'R');

//QUEBRA DE LINHA
$pdf->Ln(20);

//MONTA O CABEÇALHO
$pdf->Cell(15, 8, "", 1, 0, 'C');
$pdf->Cell(85, 8, "COLUNISTA", 1, 0, 'L');
$pdf->Cell(85, 8, "ASSUNTO", 1, 1, 'L');

//EXIBE OS REGISTROS
for($i=$inicio; $i<$fim; $i++) {
$pdf->Cell(15, 8, mysql_result($sql, $i, "ID"), 1, 0, 'C');
$pdf->Cell(85, 8, mysql_result($sql, $i, "NOME"), 1, 0, 'L');
$pdf->Cell(85, 8, mysql_result($sql, $i, "ASSUNTO"), 1, 1, 'L');
$linha_atual++;
}//FECHA FOR(REGISTROS - i)
}//FECHA FOR(PAGINAS - x)

//SAIDA DO PDF
$pdf->Output("$end_final", "$tipo_pdf");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Surgiu outra dúvida:

Minha tabela possui 5 campos e ao gerar o arquivo .pdf as 2 colunas excedentes ao tutorial ven na linha de baixo (3 colunas na primeira linha e 2 na linha seguinte)

Gostaria se possível da orientação de vocês de como implementar o código pois já quebrei a cabeça e não consegui.

 

Outra dúvida, como fazer para em vez de salvar o arquivo diretamente na máquina ele abrisse na tela com a opção para que o usuário salve se desejar.

 

Agradeço mais uma vez a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.