如何从ajax数据发送到服务器的pdf(使用jsPDF)

问题描述:

我使用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()也许可以)的方法... –

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(); 

var reader = new window.FileReader(); 
reader.readAsDataURL(doc.output("blob")); 
reader.onloadend = function() 
{ 
    ... 
    method: 'POST', 
    data: { 
     attachment: reader.result 
    } 
    ... 
} 

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