2016-09-22 17 views
5

Ben metin ve javascript jsPDF kütüphaneyi kullanan görüntülerle bir pdf oluşturmak bozuk. Ardından, bir e-posta göndermek için dosyayı sunucuya göndermek istiyorum. Sorun, sunucuya gelen dosyanın bozuk olmasıdır ve açılamıyor ya da pdf'deki görüntüleri göremiyorum.jsPDF - biter sunucuya pdf göndermek

Kodum

: -: Ben de gibi diğer şeyler denedim 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(doc.output()); bu hata veriyor

var pdf = btoa(encodeURIComponent(doc.output('blob'))); - Dosya açılamaz

var pdf = btoa(doc.output('blob')); - Dosya açılamıyor

var pdf = btoa(unescape(encodeURIComponent(doc.output()))); - dosyanız açılacaktır ancak resimler

PS bazı gri çizgiler şunlardır:

$data = base64_decode($_POST['data']); 
$fname = "test.pdf"; 
$file = fopen("pdf/" .$fname, 'w'); 
fwrite($file, $data); 
fclose($file); 

ÇÖZÜM:

js kodu:

Ben laravel 5. Sunucu kodunu kullanıyorum
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); 
}); 

sunucu kodu:

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"; 
} 

cevap

4

btoa tüm karakterini tutamayacak JavaScript ASCII bayt aralığı ... ile pislik. Yani FileReader en ~ ya ... değil dize olarak ikili doğru yolu Kulp ya readAsBinaryString 3x daha büyük base64 dize kullanmamalısınız neden nedeni, ama bir damla, ArrayBuffer veya daktilo dizisi gibi ince

dışarı dönecek
var blob = doc.output('blob') 
xhr.send(blob) 
+0

Ben arka uçta hiçbir base64_decode ile bu çalıştı ama çalışmıyor .. ya hiç hata ama hiçbir dosya bulunmamaktadır. –

+0

Bazı hata ayıklamalarından sonra, bloğu sunucuya gönderdiğimde, $ _POST ['data'] 'içinde hiçbir şeyim olmadığı anlaşılıyor. Basit bir dize gönderirsem işe yarıyor. Doc.output Gönderme ('blob') 'çalışmıyor .. –

+0

Cevabınızdan çözüm bulundu, teşekkürler. Yayını onunla güncelledim. –

İlgili konular