web-dev-qa-db-fra.com

Base64 représentant PDF to blob - JavaScript

J'ai une chaîne Base64 représentant un fichier PDF. Je veux le convertir en un fichier avec l'objet Blob en utilisant javascript. Après cela, je veux enregistrer le blob en tant que fichier PDF à l'aide de FileSaver.js.

Voici mon code:

var base64PDF = JVBERi0xLjQNCiW0t..; // This is a huge string.
var blob = new Blob([base64PDF], { type: 'application/pdf' });
saveAs(blob, "test.pdf");

Ce code ne fonctionne pas. Il enregistre un test.pdf qui dit qu'il ne peut pas ouvrir ce pdf car il y a eu une erreur dans le décodage.

J'ai aussi essayé de faire ça:

var base64PDF = JVBERi0xLjQNCiW0t..; // This is a huge string.
var decode = atob(screen.prp_wcfria_ExternalFile.pdfFile);
var blob = new Blob([decode], { type: 'application/pdf' });
saveAs(blob, "test.pdf");

Ce code ne fonctionne pas non plus. Comment puis-je faire cela?

12
user3461486

Ce javascript convertit une chaîne base64 en un objet blob:

// base64 string
var base64str = result.pdf;

// decode base64 string, remove space for IE compatibility
var binary = atob(base64str.replace(/\s/g, ''));
var len = binary.length;
var buffer = new ArrayBuffer(len);
var view = new Uint8Array(buffer);
for (var i = 0; i < len; i++) {
    view[i] = binary.charCodeAt(i);
}

// create the blob object with content-type "application/pdf"               
var blob = new Blob( [view], { type: "application/pdf" });
var url = URL.createObjectURL(blob);
33
Carlos Chaguendo

Vous devez reconvertir la chaîne base64 en données binaires d'origine. Utiliser atob n'est pas suffisant, vous devrez l'exécuter dans une boucle et le convertir en un tampon de tableau - Convertir la chaîne base64 en ArrayBuffer
Ensuite, utilisez-le pour créer le blob.

6
Musa