Salva stringa base64 come PDF sul lato client con JavaScript

Quindi, ecco il mio problema: ho un file pdf come una stringa Base64 che sto ricevendo dal server. Vorrei utilizzare questa stringa per visualizzare il PDF direttamente nel browser o dargli l’opzione “Salva come …” quando fai clic su un link. Ecco il codice che sto usando:

   jsPDF     function demo1() { jsPDF.init(); jsPDF.addPage(); jsPDF.text(20, 20, 'Hello world!'); jsPDF.text(20, 30, 'This is client-side Javascript, pumping out a PDF.'); // Making Data URI var out = jsPDF.output(); var url = 'data:application/pdf;base64,' + Base64.encode(out); document.location.href = url; }    Run Code   

Funziona bene con Chrome e Safari. Firefox riconosce il pdf ma non lo visualizza poiché FF richiede che siano presenti delle estensioni ma in questo caso l’uri dei dati non ne ha. Il motivo per cui insisto qui, se chrome e safari lo fanno funzionare, allora ci deve essere una soluzione per FF e IE

So che ci sono alcune domande pertinenti a questo, ma non proprio quelle esatte e ora anche quelle un po ‘vecchie. So che una soluzione alternativa sarebbe quella di avere il pdf generato sul lato server, ma mi piacerebbe generarlo al lato client.

Quindi, per favore gente intelligente, è ansible attraverso alcuni hack o plug-in di download JS aggiuntivi?

Dovresti essere in grado di scaricare il file usando

 window.open("data:application/pdf;base64," + Base64.encode(out)); 

So che questa domanda è vecchia, ma volevo anche farlo e l’ho trovato mentre guardavo. Per internet explorer ho usato il codice da qui per salvare un Blob. Per creare un blob dalla stringa base64 c’erano molti risultati su questo sito, quindi non è il mio codice, ma non riesco a ricordare la fonte specifica:

 function b64toBlob(b64Data, contentType) { contentType = contentType || ''; var sliceSize = 512; b64Data = b64Data.replace(/^[^,]+,/, ''); b64Data = b64Data.replace(/\s/g, ''); var byteCharacters = window.atob(b64Data); var byteArrays = []; for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) { var slice = byteCharacters.slice(offset, offset + sliceSize); var byteNumbers = new Array(slice.length); for (var i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i); } var byteArray = new Uint8Array(byteNumbers); byteArrays.push(byteArray); } var blob = new Blob(byteArrays, {type: contentType}); return blob; 

Utilizzando il salvaschermo collegato:

 if (window.saveAs) { window.saveAs(blob, name); } else { navigator.saveBlob(blob, name); } 

Puoi creare un’ancora come quella mostrata sotto per scaricare il pdf di base64 :

  

dove https://stackoverflow.com/questions/11415665/save-base64-string-as-pdf-at-client-side-with-javascript/pdfData è la tua codifica Base64 pdf come “dati: application / pdf; Base64, JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURlY29kZT4 + CnN0cmVhbQp4nO1cyY4ktxG911fUWUC3kjsTaBTQ1Ytg32QN4IPgk23JMDQ2LB / 0 + 2YsZAQzmZk1PSPIEB …”