我使用JavaScript jsPDF庫生成帶有文本和圖像的pdf。然後,我想將文件發送到服務器以便發送電子郵件。問題是,到達服務器上的文件已損壞,無法打開,或者我看不到PDF上的圖像。jsPDF - 發送pdf到服務器最終損壞
我的代碼:
var pdf = btoa(doc.output());
- 這給出了一個錯誤:Uncaught InvalidCharacterError: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.
var pdf = btoa(encodeURIComponent(doc.output()));
var data = new FormData();
data.append("data" , pdf);
var xhr = new XMLHttpRequest();
xhr.open('post', '/url', true);
xhr.send(data);
我也試着像其他的東西:
var pdf = btoa(encodeURIComponent(doc.output('blob')));
- 文件無法打開
var pdf = btoa(doc.output('blob'));
- 文件無法打開
var pdf = btoa(unescape(encodeURIComponent(doc.output())));
- 該文件將打開,但圖像是一些灰色線
PS:我使用Laravel 5.服務器代碼:
$data = base64_decode($_POST['data']);
$fname = "test.pdf";
$file = fopen("pdf/" .$fname, 'w');
fwrite($file, $data);
fclose($file);
SOLUTION:
JS代碼:
var blob = doc.output('blob');
var fd = new FormData();
fd.append('data', blob);
$.ajax({
type: 'POST',
url: '/url',
data: fd,
processData: false,
contentType: false
}).done(function(data) {
console.log(data);
});
服務器代碼:
if(!empty($_FILES['data'])){
move_uploaded_file(
$_FILES['data']['tmp_name'],
public_path() . '/test.pdf'
);
return "Pdf was successfully saved.";
} else {
return "No Data Sent";
}
我試過在後臺沒有base64_decode,但它不工作..沒有錯誤,但沒有文件。 –
確定經過一些調試後,似乎當我將blob發送到服務器時,我在$ _POST ['data']'中沒有任何內容。如果我發送一個簡單的字符串,它正在工作。發送'doc.output('blob')'不起作用.. –
找到你的答案的解決方案,謝謝。我用它更新了這篇文章。 –