私は、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. Serverのコードを使用しています:
$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を使用しないでこれを試しましたが、動作しません。エラーもファイルもありません。 –
いくつかのデバッグの後でOKです。サーバにBLOBを送信すると、 '$ _POST ['data']'に何もありません。私は単純な文字列を送信する場合、それは動作しています。 'doc.output( 'blob')を送信していません。 –
あなたの答えから解決策を見つけました。私はそれを使って投稿を更新しました。 –