2016-04-28 10 views
0

Wichtig: Ich benutze Python.So laden Sie pdf im Internet herunter

Ich benutze reportlab, um eine PDF auf dem Server (Kolben) zu erstellen, und ich bekomme eine Zeichenfolge von methond str = canvas.getpdfdata(). Ich kann f = open('result.pdf', 'wb') und f.write(str) verwenden, um dies als pdf zu speichern.

Jetzt möchte ich diese pdf im Web herunterladen, aber ich möchte keine PDF-Datei auf dem Server erstellen, also sende ich die Zeichenfolge an das Web, und möchte js zu der Erstellungsdatei verwenden und laden Sie es.

Ich versuchte js Code wie folgt zu verwenden: (saveAs Funktion ist in FileSaver.js, die auf Github zu finden sind)

var blob = new Blob([{{ str }}], {type: "application/pdf"}); 
saveAs(blob, "result.pdf"); 

er den Fehler wirft Uncaught SyntaxError: Unexpected identifier, ich versuche, die String-Codierung zu ändern, verhexen und base64, aber es hilft nicht.

Können Sie mir helfen? Oder können Sie mir eine Möglichkeit geben, dieses PDF zu erstellen und herunterzuladen, ohne eine Datei auf dem Server zu erstellen?

Antwort

0

Wie in der Antwort auf this SO Frage zu lesen, müssen Sie die binären Daten in einem ByteArray ersten konvertieren:

var byteArray = new Uint8Array(hexdata.length/2); 
for (var x = 0; x < byteArray.length; x++){ 
    byteArray[x] = parseInt(hexdata.substr(x*2,2), 16); 
} 
var blob = new Blob([byteArray], {type: "application/octet-stream"}); 

Beispiel hier: http://jsfiddle.net/mowglisanu/15h9o3d5/

Und this Frage stellt genau die gleiche Sache wie du.

+0

wirklich danke !!! Es ist meine Schuld, ich habe einen dummen Fehler gemacht ... Wenn das Web die Serverdaten holt, sollte es 'var str =" {{data}} "' verwenden, aber ich benutze 'var str = {{data}}' .. .T_T –