我正在嘗試將 blob 物件轉換為 pdf 并下載它。
到目前為止,我已經嘗試了以下方法:
var downloadLink = document.createElement('a');
downloadLink.target = '_blank';
downloadLink.download = 'name_to_give_saved_file.pdf';
// convert downloaded data to a Blob
var blob = new Blob([file.$binary], { type: 'application/pdf' });
// create an object URL from the Blob
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
// set object URL as the anchor's href
downloadLink.href = downloadUrl;
// append the anchor to document body
document.body.append(downloadLink);
// fire a click event on the anchor
downloadLink.click();
檔案大小似乎是正確的,但我無法查看它,因為它似乎已損壞。
查看我的 html 檔案中的 PDF 的作業方式如下:
$('#test').html('<embed width=100% height=100%'
' type="application/pdf"'
' src="data:application/pdf;base64,'
escape(file.$binary)
'"></embed>')
這作業沒有任何問題!
現在我的問題......為什么一個作業而另一個不作業?
謝謝你的幫助...
uj5u.com熱心網友回復:
您file.$binary的不是二進制資料(即使物件名稱是`$binary)。它實際上是一個包含二進制資料的 base64 表示的字串。
因此,在制作 a 之前Blob,您需要將字串轉換為二進制資料。
您可以使用以下方法(來自https://stackoverflow.com/a/16245768):
const b64toBlob = (b64Data, contentType='', sliceSize=512) => {
const byteCharacters = atob(b64Data);
const byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset = sliceSize) {
const slice = byteCharacters.slice(offset, offset sliceSize);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i ) {
byteNumbers[i] = slice.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
const blob = new Blob(byteArrays, {type: contentType});
return blob;
}
然后你可以做
var blob = b64toBlob(file.$binary, 'application/pdf');
查看同一問題的其他答案(https://stackoverflow.com/a/36183085),有一種更小的方法可以做到這一點:
const b64toBlob = (base64, type = 'application/octet-stream') =>
fetch(`data:${type};base64,${base64}`).then(res => res.blob())
然后你仍然可以做
var blob = b64toBlob(file.$binary, 'application/pdf');
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/388681.html
標籤:javascript pdf 斑点
