2017-08-01 119 views
0

我將我的服務器的bin-code返回給angular,並且希望將其作爲pdf打開。無法將blob轉換爲pdf

不幸的是,我總是在打開文檔時出錯。我想我解釋錯了數據。

這是我的代碼把該串中一個pdf:

$scope.downloadFile = function(item){ 
    var file = blob = new Blob([item.contents], { type: 'application/pdf' }); 
    var fileURL = URL.createObjectURL(file); 
    window.open(fileURL, "pdf"); 
} 

爲這樣的字符串將是(包含單詞 「測試」 PDF)的一個例子:

JVBERi0xLjUNJeLjz9MNCjQgMCBvYmoNPDwvTGluZWFyaXplZCAxL0wgMzI3NTAvTyA2L0UgMjA1NzMvTiAxL1QgMzI1NTEvSCBbIDU5NiAxNTRdPj4NZW5kb2JqDSAgICAgICAgICAgICAgICAgICAgDQp4cmVmDQo0IDE1DQowMDAwMDAwMDE2IDAwMDAwIG4NCjAwMDAwMDA3NTAgMDAwMDAgbg0KMDAwMDAwMDgxMCAwMDAwMCBuDQowMDAwMDAwOTg0IDAwMDAwIG4NCjAwMDAwMDExNTggMDAwMDAgbg0KMDAwMDAwMTMxMiAwMDAwMCBuDQowMDAwMDAxMzQ2IDAwMDAwIG4NCjAwMDAwMDE4 MTEgMDAwMDAgbg0KMDAwMDAwNDQ2MCAwMDAwMCBuDQowMDAwMDA1MDMxIDAwMDAwIG4NCjAwMDAwMDUyNTcgMDAwMDAgbg0KMDAwMDAwNTQyOSAwMDAwMCBuDQowMDAwMDA1NzQwIDAwMDAwIG4NCjAwMDAwMTI3NTggMDAwMDAgbg0KMDAwMDAwMDU5NiAwMDAwMCBuDQp0cmFpbGVyDQo8PC9TaXplIDE5L1Jvb3QgNSAwIFIvSW5mbyAzIDAgUi9JRFs8MjU1MDdFOUU5MTYxRDc0Mjk4QTRDQjYzMDIxMTM2NTQ

在服務器上的功能

byte[] bytDocu; 
Response.BinaryWrite(bytDocu); 

用於創建PDF文件。

+0

你提到的responseType:「arraybuffer」而發送請求? – AkankshaGupta

+0

您的服務器調用將PDF作爲未壓縮的base 64進行返回。這是對帶寬的非常差的使用,因爲該文件比僅發送原始PDF大約大15%。 –

回答

0

如果你的函數返回的base64字符串,然後用它來下載PDF

var contentType = 'application/pdf'; 
var sliceSize = 512; 

var b64Data = item.contents // byte 64 string 

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

blob = new Blob(byteArrays, { 
    type: contentType 
}); 

var a = document.createElement("a"); 
var url = window.URL.createObjectURL(blob); 

document.body.appendChild(a); 
a.style = "display: none"; 
a.href = url; 
a.download = fileName; 
a.click(); 
window.URL.revokeObjectURL(url);