2015-06-18 56 views
5

我使用jsPDF在客戶端生成pdf。通過函數doc.save('filename.pdf'),我可以下載它。 現在我需要將它保存在服務器上,所以我使用.ajax()發送PDF數據並用PHP腳本接收它,但生成的pdfURL上的圖像不顯示(http://mydomain/tmp/test.pdf);只顯示文字。如何從ajax數據發送到服務器的pdf(使用jsPDF)

你能幫我一下嗎?

我的js代碼:

//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); 
}); 

PHP腳本:

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

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

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

這是PHP腳本proccess後生成的PDF: http://control.edge-cdn.com.ar/tmp/test.pdf

,這是與生成doc.save()函數: http://control.edge-cdn.com.ar/repo/all.pdf 關心!

+0

因此,test.pdf確實以pdf格式打開,它只包含帶有破碎圖像的文本? –

+0

您是否在同一臺計算機上使用相同的軟件打開兩個pdf(一個來自服務器,另一個使用js保存)? –

+0

- >您可以使用js生成pdf文件doc.output();數據?也許這是負責該錯誤(和doc.save()也許可以)的方法... –

回答

9

SOLUTION

我試圖來發送PDF數據爲二進制。我只是base64編碼的字符串,發送它們和他們在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

我怎樣才能發送文件名? – daniel

相關問題