2016-03-16 156 views
3

我有一個Base64代表PDF文件的字符串。 我想使用JavaScript將其轉換爲Blob對象的文件。 完成後,我想使用FileSaver.js將blob保存爲PDF文件。Base64代表PDF到BLOB - JavaScript

這裏是我的代碼:

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

此代碼不能正常工作。它保存了一個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"); 

此代碼也不起作用。我該怎麼做呢?

+0

[創建從在JavaScript一個base64串中Blob]的可能的複製(http://stackoverflow.com/questions/16245767/creating-一個-斑點-從-A-的base64字符串中的JavaScript) – Endless

回答

1

您必須將base64字符串轉換回原始二進制數據。使用atob是不夠的,你必須通過一個循環運行它並將其轉換爲數組緩衝區 - Convert base64 string to ArrayBuffer
然後使用它來創建blob。

8

該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);