Отображение 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

реализация base64binary

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.