2015-06-18 21 views
5

Tôi đang sử dụng jsPDF để tạo bản pdf ở phía máy khách. Với hàm doc.save ('filename.pdf') tôi có thể tải xuống nó. Bây giờ tôi cần phải lưu nó trên máy chủ, vì vậy tôi đang gửi dữ liệu pdf với .ajax() và nhận nó bằng một tập lệnh PHP nhưng hình ảnh trên pdfURL được tạo không hiển thị (http://mydomain/tmp/test.pdf); chỉ hiển thị văn bản.cách tải bản pdf lên máy chủ từ dữ liệu ajax gửi (sử dụng jsPDF)

Bạn có thể cho tôi một tay không?

My js mã:

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

Các kịch bản 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(); 
?> 

Đây là pdf được tạo ra sau khi php scripting proccess: http://control.edge-cdn.com.ar/tmp/test.pdf

Và đây là tạo ra với Hàm doc.save(): http://control.edge-cdn.com.ar/repo/all.pdf Trân trọng!

+0

Vì vậy test.pdf không mở dưới dạng pdf, nó chỉ chứa văn bản có hình ảnh bị hỏng? –

+0

Bạn có đang mở hai tệp PDF (một từ máy chủ và một tệp được lưu bằng js) với cùng một phần mềm, trên cùng một máy tính không? –

+0

-> Bạn có thể tạo ra bằng cách sử dụng js một tệp pdf từ doc.output(); dữ liệu? Có lẽ đó là phương pháp chịu trách nhiệm cho lỗi đó (và doc.save() có thể ok) ... –

Trả lời

9

SOLUTION:

Tôi đã cố gắng để gửi dữ liệu pdf như nhị phân. Tôi chỉ base64 mã hóa chuỗi, gửi nó và họ giải mã đó trên 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

làm cách nào để gửi tên tệp? – daniel

Các vấn đề liên quan