2017-06-13 4 views
0

Ich hatte einige Beispielcodes schreiben, um pdf in meinem Laravel-Controller zu generieren. Es wird ein 200er Antwortcode angezeigt, aber die PDF wird nicht generiert.Kann nicht erzeugt werden in Laravel-Controller

Unten ist mein Code.

function exportPDF() { 
    // instantiate and use the dompdf class 
    $dompdf = new PDF(); 
    $dompdf->loadHtml('<h1>hello world</h1>'); 

    // (Optional) Setup the paper size and orientation 
    $dompdf->setPaper('A4', 'landscape'); 

    // Render the HTML as PDF 
    $dompdf->render(); 

    // Output the generated PDF to Browser 
    return $dompdf->stream(); 
} 

Aber das funktioniert, wenn ich direkt den Code innerhalb Route in web.php Datei enthalten.

Route::get('/generate-pdf', function() { 
     $pdf = App::make('dompdf.wrapper'); 
     $pdf->loadHTML('<h1>Test</h1>'); 
     return $pdf->stream(); 
    }); 

EDITED

web.php

Route::post('/report-audit-export-pdf', '[email protected]'); 

Js

window.exportPDF = function() { 
    var hidden_category = $('#hidden_category').val(); 
    $.ajax({ 
     type: "POST", 
     url: '/report-audit-export-pdf', 
     data: { 

     }, 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      console.log("jqXHR : " + jqXHR + " and textStatus : " + textStatus + " and errorThrown : " + errorThrown); 
     }, 
     success: function(content) { 
     // alert("Success"); 
     } 
    }); 
} 

Darf ich wissen, was das Problem ist?

+0

So hat es etwas mit der Route zu tun und Controller-Funktion Ionenname. Zeigen Sie Ihre anfängliche Route an, wenn Sie den Controller verwenden. – EddyTheDove

+0

@EddyTheDove Ich habe meinen Beitrag bearbeitet. Schau es dir an. Vielen Dank! – etzzz

+0

erstellen Sie pdf über Ajax ..? –

Antwort

1

Sie können keine PDFs über Ajax generieren, da Ajax-Anfragen eine Antwort erwarten, die Laravel standardmäßig als JSON zurücksendet. Also, was Sie tun können, ist eine normale Route planen machen, die den PDF zB anzeigt:

Route::get('display-pdf', '[email protected]'); 

Da Ihr Ajax keine Daten POST (Ihr Datenobjekt leer ist), könnten Sie Ihre Ajax-Anforderung umgehen und einfach verwenden einen Anker

<a href="/display-pdf">Display PDF</a> 

Wenn aus irgendeinem Grund, möchten Sie noch ajax verwenden möchten, können Sie den Erfolg Antwort von der ajax-Request verwenden wie dieses

$.ajax({ 
    type: "POST", 
    url: '/data-url', 
    data: {}, 
    success: function(content) { 
     window.location.href = '/display-pdf'; 
    } 
}); 
Verwandte Themen