2016-07-04 7 views
0

Ich benutze Laravel/Jquery mit Barryvdh/Laravel-Snappy, um ein PDF on the fly aus Datenbankdaten zu erstellen.Laravel bissig pushen PDF herunterladen

Im Controller habe ich:

if ($request->ajax()) 
{ 
    $document = Document::url($id)->first(); 
    $pdf = PDF::loadView('app.documents.whitepapers.pdf', compact('document')); 
    return $pdf->download('filename.pdf'); 
    // return response()->send($pdf->download('filename.pdf'), 200, $headers); 
} 

Wie kann ich diese PDF an den Browser schieben, so dass als Download zur Verfügung steht?

Wenn ich es ohne Jquery mache, funktioniert es perfekt. Der Grund, dass es hinter einer Jquery-Funktion ist, ist, dass ich ein Modal mit einem Formular verwende, um Personendaten zu sammeln, bevor der Download initiiert werden kann. Dies hat Ajax-Validierung.

+0

zu Schritt Welches Verhalten sind Sie im Moment sehen, wenn Sie den von Ihnen geposteten Code verwenden? –

+0

Ich sehe die Binärdaten aus der PDF in JavaScript-Konsole und ich nehme an, es ist genug, um das Ergebnis zu pushen, aber es ist nicht. Muss ich etwas in meinem jQuery Ajax 'Erfolg' tun, um das Ergebnis zu pushen? – klaaz

+0

Es gibt eine [Antwort hier] (http://stackoverflow.com/a/27563953/1206267), die diesen fehlenden Link für Sie lösen sollte. – Ohgodwhy

Antwort

1

Sie können die Datei nicht als regulären Download über JavaScript darstellen. Um dem Benutzer eine Download-Aufforderung anzuzeigen, benötigen Sie einen zusätzlichen Schritt in Ihrem Workflow.

würde ich den folgenden Workflow vorschlagen:

  1. Benutzer senden modales Formular
  2. Formular über AJAX validiert. Wenn die Validierung erfolgreich ist, antworten Sie mit einer URL, um die PDF-Datei des Benutzers anstelle der PDF-Datei herunterzuladen.
  3. Ihr JavaScript leitet den Benutzer auf diese URL um. Beachten Sie, dass dies eine Weiterleitung und keine andere AJAX-Anfrage ist (siehe top.location.href)
  4. Wenn der Benutzer auf diese URL zugreift, können Sie die PDF-Datei mit dem Code-Snippet bereitstellen, das Sie in Ihrer ursprünglichen Frage angegeben haben. Dieses Snippet setzt die content-disposition der Antwort entsprechend, wodurch die Download-Eingabeaufforderung im Browser des Benutzers angezeigt wird.

Wenn Sie die PDF-Generierung für jeden Benutzer anpassen müssen, stellen Sie sicher, dass die Benutzer-ID (oder ein anderes Stück identifizierende Informationen) enthalten bis 4.