Base64代表PDF到blob - JavaScript

use*_*486 13 javascript pdf blob

我有一个表示PDF文件的Base64字符串.我想使用javascript将其转换为Blob对象的文件.完成后,我想使用FileSaver.js将blob保存为PDF文件.

这是我的代码:

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

此代码不起作用.它保存了一个test.pdf,表示无法打开此pdf,因为解码时出错.

我也试过这样做:

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");
Run Code Online (Sandbox Code Playgroud)

此代码也不起作用.我该怎么做呢?

Car*_*ndo 36

这个javascript将base64字符串转换为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);
Run Code Online (Sandbox Code Playgroud)


Mus*_*usa 6

您必须将base64字符串转换回原始二进制数据.使用atob是不够的,你必须通过循环运行它并将其转换为数组缓冲区 - 将base64字符串转换为ArrayBuffer
然后使用它来创建blob.