Рендеринг PDF в Edge и IE11 в Embed
Я думал, что у меня есть решение для этого с использованием встраивания, чтобы Adobe отображал PDF в браузерах, когда я делал:
<embed src="./assets/pdf/example-1.pdf"
width="100%"
height="675px"
style="border: 1px solid red"
type="application/pdf">
Но когда я пытаюсь динамически установить код для вставки src
с помощью URL.createObjectURL(blob)
и привязать его к embed
в Angular это не делает:
<embed [src]="url"
width="100%"
height="675px"
style="border: 1px solid red"
type="application/pdf">
Есть ли еще что-то для рендеринга PDF-файла во вставке blob
другой тогда:
this.http(..., { responseType: 'blob', observe: 'response' })
.subscribe((blob) => {
url = URL.createObjectURL(blob);
this.url = this.domSanitizer
.bypassSecurityTrustResourceUrl(url);
});
Я знаю, что могу использовать PDF.js с Angular с помощью плагина, но я не могу понять, как использовать ViewerJS с ним, чтобы получить элементы управления панорамированием, масштабированием и т. Д. Поэтому я просто хочу отобразить PDF, отправленный в ответ с использованием Adobe в Edge и IE11. Это может быть в iframe
, но это работало только в Edge, а не в IE11 без отображаемых ошибок
Например, использование этого было предложено для кросс-браузерной совместимости при получении base64
из PDF, но это работает только для Edge, а не IE11.
// Default to Chrome
let url = `data:application/pdf;base64,${src}`;
// Internet Explorer 11 and Edge workaround
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
const byteCharacters = atob(src);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
const blob = new Blob([byteArray], { type: 'application/pdf' });
url = URL.createObjectURL(blob);
if (this.url) {
// Release URLs for performance and memory usage
this.window.URL.revokeObjectURL(this.url);
}
}
this.url = this.domSanitizer
.bypassSecurityTrustResourceUrl(url);
<iframe id="result"
[src]="url"
style="width: 100%; height: 95vh; border: 1px solid red;"
sandbox></iframe>
1 ответ
Это все работает для IE11, если вы удалите sandbox
атрибут из фрейма. Ооочень, сняв ограничения безопасности, предоставленные sandbox
IE11 работает, хотя https://caniuse.com/ указывает, что он совместим с IE11.