2015-06-18 7 views
5

Ich benutze jsPDF, um ein pdf auf Klienten-Seite zu erzeugen. Mit der Funktion doc.save ('Dateiname.pdf') kann ich es herunterladen. Nun muss ich es auf dem Server speichern, also sende ich die pdf-Daten mit .ajax() und empfange es mit einem PHP-Skript, aber die Bilder auf der generierten pdfURL werden nicht angezeigt (http://mydomain/tmp/test.pdf); zeigt nur den Text an.wie man pdf von Ajax-Daten zum Server hochlädt (mit jsPDF)

Können Sie mir bitte eine Hand geben?

Mein js Code:

//doc.save('test.pdf'); WORKS WELL 
var pdf = doc.output(); 
$.ajax({ 
    method: "POST", 
    url: "inc/test.php", 
    data: {data: pdf}, 
}).done(function(data){ 
    console.log(data); 
}); 

Das PHP-Skript: http://control.edge-cdn.com.ar/tmp/test.pdf

Und das ist die mit dem erzeugten:

<?php 
if(!empty($_POST['data'])){ 

    $data = $_POST['data']; 
    print_r($data); 

    file_put_contents("../tmp/test.pdf", $data); 
} else { 
    echo "No Data Sent"; 
} 
exit(); 
?> 

Dies ist die pdf nach dem PHP-Scripting proccess erzeugt wird doc.save() Funktion: http://control.edge-cdn.com.ar/repo/all.pdf Grüße!

+0

Also test.pdf öffnet sich als PDF, es enthält nur nur Text mit gebrochenen Bildern? –

+0

Öffnen Sie die beiden PDFs (die vom Server und die mit js gespeicherten) mit der gleichen Software auf demselben Computer? –

+0

-> Können Sie mit js eine PDF-Datei aus dem doc.output() erzeugen; Daten? Vielleicht ist es diese Methode, die für diesen Fehler verantwortlich ist (und die doc.save() vielleicht ok) ... –

Antwort

9

SOLUTION:

Ich habe versucht, die PDF-Daten als binäre zu senden. Ich base64 kodiere einfach die Zeichenfolge, sende sie und dekodiere sie auf dem PHP.

JS:

var pdf = btoa(doc.output()); 
    $.ajax({ 
     method: "POST", 
     url: "inc/test.php", 
     data: {data: pdf}, 
    }).done(function(data){ 
     console.log(data); 
    }); 

PHP:

if(!empty($_POST['data'])){ 
$data = base64_decode($_POST['data']); 
// print_r($data); 
file_put_contents("../tmp/test.pdf", $data); 
} else { 
echo "No Data Sent"; 
} 
exit(); 
0
var reader = new window.FileReader(); 
reader.readAsDataURL(doc.output("blob")); 
reader.onloadend = function() 
{ 
    ... 
    method: 'POST', 
    data: { 
     attachment: reader.result 
    } 
    ... 
} 
0

JS

var pdf =doc.output(); 
    var data = new FormData(); 
    data.append("data" , pdf); 
    var xhr = new XMLHttpRequest(); 
    xhr.open('post', 'inc/test.php', true); 
    xhr.send(data); 

PHP

if(!empty($_POST['data'])){ 
    $data = $_POST['data']; 
    $fname = "test.pdf"; 
    $file = fopen("test/pdf/" .$fname, 'r'); 
    fwrite($file, $data); 
    fclose($file); 
} else { 
    echo "No Data Sent"; 
} 
+0

Wie kann ich den Dateinamen senden? – daniel