Отображение Blob PDF в Edge/IE11
у меня есть приложение django (из которого я получаю html в качестве клиента) и PDF с кодировкой base64, который должен отображаться. Я пробовал несколько подходов, которые работают, как ожидалось в Chrome и Firefox.
Я работаю с django, поэтому будут некоторые шаблоны и некоторые JavaScript.
pdf_preview_embed
- это div
Вставить DataURL
<embed width=100% height=100% type="application/pdf" src="data:application/pdf;base64, {{ pdf }}"></embed>
неприемлемое решение, потому что оно может потребовать встроенных мегабайт данных. Работает в IE11 под Windows 7, не работает на Edge и IE11 под Windows 10.
Вставить Blob
var blob = new Blob( [Base64Binary.decode(pdf)], {'type': 'application/pdf'} );
pdfURL = URL.createObjectURL( blob );
$('#pdf_preview_embed').html(
'<embed width=100% height=100% type="application/pdf" src="'+pdfURL+'"></embed>'
);
также не работает в Edge и IE11.
Blob
$('#pdf_preview_embed').html(
'<iframe src="'+pdfURL+'" style="width: 100%; height: 100%;" frameborder="0" scrolling="no"></iframe>'
);
Edge утверждает, что не может открыть pdf, а IE11 ничего не показывает.
фактически используя pdf.js для отображения pdf
теперь здесь что-то происходит: я узнал, что источник url blob-адреса null
, вместо из приложения для Edge и IE11, вызывающего pdf.js, чтобы отказаться открывать его. Сервер CORS настроен для разрешения всех источников. Я немного заблудился.
1 ответов
обходной путь кросс-браузера, чтобы иметь iframe PDF.js загружает blob PDF через URI iframe.
пример стандартного URI blob случая использования:
/viewer.html?file=blob:19B579EA-5217-41C6-96E4-5D8DF5A5C70B
просмотр файлов.js:
в пределах функции webViewerOpenFileViaURL:
изменить с:
if (file && file.lastIndexOf('file:', 0) === 0) {
в:
if (file && file.lastIndexOf('file:', 0) === 0 || file && file.lastIndexOf('blob:', 0) === 0) {
и далее остановить зрителя от взлома, когда "происхождение" ведет себя в IE 11 / Edge:
внутри функции validateFileURL:
изменить с:
if (fileOrigin !== viewerOrigin) {
в:
if (fileOrigin != "null" && fileOrigin !== viewerOrigin) {
теперь FF, Chrome, IE 11 и Edge отображают PDF в средстве просмотра в iframe, переданном через стандартный URI blob в URL.