我目前使用一个64位编码的字符串来表示PDF文件,并使用以下代码(简化)将其转换为AngularJS中的blob:
var base64PdfToBlob = function(b64Data: string, contentType: string) {
var sliceSize = 512;
var byteCharacters = 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);
}
var blob = new Blob(byteArrays, { type: contentType });
return blob;
}
var pdfBlob = base64PdfToBlob(base64Pdf, "application/pdf");
var blobUrl = URL.createObjectURL(pdfBlob);
$scope.pdfDoc = $sce.trustAsResourceUrl(blobUrl);然后我使用以下代码将pdf嵌入到html中:
<object data="{{pdfDoc}}" type="application/pdf" width="100%" height="100%"></object>这在chrome、firefox和safari中都有效。这在边或IE11中不起作用。我觉得我已经尝试了所有的方法,但都没有效果。
我尝试过的事情: 1.使用embed和object标签。2.卸载并重装adobe reader。处理adobe reader和IE之间的设置和配置。3.更改IE中的安全设置。
做一个iFrame,新的标签,新的窗口,下载pdf不是一个选项。PDF必须嵌入到当前页面中。我正在阅读的一些文档似乎表明,这在Edge中是不可能的,但在IE中应该可以工作。
我的机器是Windows10,64位,IE11,Adobe Acrobat Reader DC 2015.017.20050
发布于 2018-05-11 07:53:34
URL.createObjectURL()与IE11不兼容。不过,是Mozilla docs state that this function is compatible starting with IE12。
我不相信在IE11或Edge中嵌入表示PDF的内联blob数据是可能的。在IE中有一个单独的函数用于处理blobs,称为msSaveOrOpenBlob,但它的缺点是提示用户是否要保存或打开文件。
https://stackoverflow.com/questions/39338471
复制相似问题