Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Como gerar um PDF utilizando o dompdf ?

Boa tarde, senhores !

Como faço para gerar um arquivo pdf a partir de uma View? Essa view é chamada a partir desse metodo:

public function trem(){
        $numero = Request::input ('id');
        $trem = DB::select('select *from diametro where id = ?', [$numero]);
            if (empty($trem)) {
                return "digite um numero valido";
                            }    
        return view('/trens/listagem')->with ('t', $trem[0]) ;
    }

Criei uma função para gerar o pdf mas estou com dificuldade em chamar a view e passar a variável 't', que contém os dados dos inputs para preencher no arquivo. A minha função pdf:

public function gerapdf(){
        $diametro=Diametro::all();  //??? como chamar a partir do id ?
            $pdf=PDF::loadView('trens.listagem', [ ]); //? como passar para a view?
        return $pdf->download ('teste.pdf');

Aqui eu preciso apenas de exibir uma linha do BD e não todas. Se alguém souber desde já agradeço.

6 respostas

Pode usar o Diametro::findOrFail($id) , vai retornar o modelo com o id que passou.

Estou passando o id pelo link:

    <a href="pdf?id=<?= $t->id ?>"><h3>Gerar PDF</h3></a>

A minha função é essa:

public function gerapdf(){
        $id= Request:: input('id');
        $t = Diametro::find($id); 
            $pdf=PDF::loadView('pdf.teste', compact('t'));           
            return $pdf->stream ('teste.pdf');
}

Estou recebendo como resposta isso: Undefined variable: t (View: diametro\resources\views\pdf\teste.blade.php)

Essa é aminha view:

<ul>
            @forelse($t as $t)             


    <div class="container" style="width:100%" >
        <table class="table table-striped" border= "1" cellpadding="1" align="center">
            <tbody>

    <tr>
        <th><center>TREM: <?= $t->id ?></center></th> 
        <th><center>Diâmetros lado redutor (mm)</center></th>
        <th><center>Diâmetros lado oposto (mm)</center></th>
    </tr>
</div>            

           @empty       

<li>Nenhum Produto Cadastrado.</li>

            @endforelse
        </ul>

Por que a variável 't' não está passando para a View?? Detalhe: Quando eu uso :

$t = Diametro::all() ; no lugar de 
$t = Diametro::find($id);

Dai funciona, conforme o que se espera. Ou seja, gera pdf mas com todas as linhas da tabela. Eu preciso pegar pelo id. Alguém poderia me dar uma ajuda, por favor. Obrigado pela atenção.

solução!

Faz o dump de $t e posta o resultado pra gente dá uma olhada. Outra o find() retorna o modelo, o All() uma Collection.

public function gerapdf(){
   $id= Request:: input('id');
    $t = Diametro::find($id); 
     dd($t);
    $pdf=PDF::loadView('pdf.teste', compact('t'));           
         return $pdf->stream ('teste.pdf');
}

O resultado do dump em $t: dd($t); Obrigado.

Diametro {#180 ▼
  #table: "diametro"
  +timestamps: false
  #fillable: array:51 [▼
    0 => "id"
    1 => "carro"
    2 => "eixo1"
    3 => "eixo2"
    4 => "eixo3"
    5 => "eixo4"
    6 => "eixo1r"
    7 => "eixo2r"
    8 => "eixo3r"
    9 => "eixo4r"
    10 => "eixo12"
    11 => "eixo22"
    12 => "eixo32"
    13 => "eixo42"
    14 => "eiox12r"
    15 => "eixo22r"
    16 => "eixo32r"
    17 => "eixo42r"
    18 => "eixo13"
    19 => "eixo23"
    20 => "eixo33"
    21 => "eixo43"
    22 => "eixo13r"
    23 => "eixo23r"
    24 => "eixo33r"
    25 => "eixo43r"
    26 => "eixo14"
    27 => "eixo24"
    28 => "eixo34"
    29 => "eixo44"
    30 => "eixo14r"
    31 => "eixo24r"
    32 => "eixo34r"
    33 => "eixo44r"
    34 => "eixo15"
    35 => "eixo25"
    36 => "eixo35"
    37 => "eixo45"
    38 => "eixo15r"
    39 => "eixo25r"
    40 => "eixo35r"
    41 => "eixo45r"
    42 => "eixo16"
    43 => "eixo26"
    44 => "eixo36"
    45 => "eixo46"
    46 => "eixo16r"
    47 => "eixo26r"
    48 => "eixo36r"
    49 => "eixo46r"
    50 => "falha"
  ]
  #connection: null
  #primaryKey: "id"
  #perPage: 15
  +incrementing: true
  #attributes: array:51 [▼
    "id" => 301
    "carro" => 3011
    "eixo1" => 7290
    "eixo2" => 8302
    "eixo3" => 8303
    "eixo4" => 8244
    "eixo1r" => 822
    "eixo2r" => 830
    "eixo3r" => 830
    "eixo4r" => 824
    "eixo12" => 8005
    "eixo22" => 7226
    "eixo32" => 700
    "eixo42" => 800
    "eixo12r" => 700
    "eixo22r" => 810
    "eixo32r" => 800
    "eixo42r" => 800
    "eixo13" => 800
    "eixo23" => 800
    "eixo33" => 800
    "eixo43" => 800
    "eixo13r" => 800
    "eixo23r" => 800
    "eixo33r" => 800
    "eixo43r" => 800
    "eixo14" => 800
    "eixo24" => 800
    "eixo34" => 800
    "eixo44" => 800
    "eixo14r" => 800
    "eixo24r" => 800
    "eixo34r" => 800
    "eixo44r" => 800
    "eixo15" => 800
    "eixo25" => 800
    "eixo35" => 800
    "eixo45" => 800
    "eixo15r" => 800
    "eixo25r" => 800
    "eixo35r" => 800
    "eixo45r" => 800
    "eixo16" => 800
    "eixo26" => 800
    "eixo36" => 800
    "eixo46" => 800
    "eixo16r" => 800
    "eixo26r" => 800
    "eixo36r" => 800
    "eixo46r" => 800
    "falha" => "fa2201"
  ]
  #original: array:51 [▼
    "id" => 301
    "carro" => 3011
    "eixo1" => 7290
    "eixo2" => 8302
    "eixo3" => 8303
    "eixo4" => 8244
    "eixo1r" => 822
    "eixo2r" => 830
    "eixo3r" => 830
    "eixo4r" => 824
    "eixo12" => 8005
    "eixo22" => 7226
    "eixo32" => 700
    "eixo42" => 800
    "eixo12r" => 700
    "eixo22r" => 810
    "eixo32r" => 800
    "eixo42r" => 800
    "eixo13" => 800
    "eixo23" => 800
    "eixo33" => 800
    "eixo43" => 800
    "eixo13r" => 800
    "eixo23r" => 800
    "eixo33r" => 800
    "eixo43r" => 800
    "eixo14" => 800
    "eixo24" => 800
    "eixo34" => 800
    "eixo44" => 800
    "eixo14r" => 800
    "eixo24r" => 800
    "eixo34r" => 800
    "eixo44r" => 800
    "eixo15" => 800
    "eixo25" => 800
    "eixo35" => 800
    "eixo45" => 800
    "eixo15r" => 800
    "eixo25r" => 800
    "eixo35r" => 800
    "eixo45r" => 800
    "eixo16" => 800
    "eixo26" => 800
    "eixo36" => 800
    "eixo46" => 800
    "eixo16r" => 800
    "eixo26r" => 800
    "eixo36r" => 800
    "eixo46r" => 800
    "falha" => "fa2201"
  ]
  #relations: []
  #hidden: []
  #visible: []
  #appends: []
  #guarded: array:1 [▼
    0 => "*"
  ]
  #dates: []
  #dateFormat: null
  #casts: []
  #touches: []
  #observables: []
  #with: []
  #morphClass: null
  +exists: true
  +wasRecentlyCreated: false
}

Resolvido: o erro estava no uso do @forelse na view. Apos elimina-lo, a função gerou o pdf conforme esperado. obrigado pelas dicas, Carlos Henrique.

Tamo junto! : )