Открытие PDF String в новом окне с JavaScript

У меня грубое правило большого пальца

. Функциональность: может быть разной во всех частях: интерфейс.

. Данные и функциональные возможности будут в основном одинаковыми, детали разные: абстрактный класс.

Данные и функциональность, фактически работающие, если расширены только с небольшими изменениями: обычный (конкретный) класс

Данные и функциональность, никаких изменений не запланировано: обычные ( конкретный) класс с окончательным модификатором.

Данные и, возможно, функциональность: только для чтения: перечисляемые члены.

Это очень грубо, готово и совсем не строго определено, но есть спектр от интерфейсов, где все предназначено для изменения в перечислениях, где все исправлено немного как файл только для чтения.

43
задан DaveC 10 May 2010 в 18:26
поделиться

2 ответа

используйте функцию "printPreview (binaryPDFData)" для получения диалогового окна предварительного просмотра двоичных данных PDF.

printPreview = (data, type = 'application/pdf') => {
    let blob = null;
    blob = this.b64toBlob(data, type);
    const blobURL = URL.createObjectURL(blob);
    const theWindow = window.open(blobURL);
    const theDoc = theWindow.document;
    const theScript = document.createElement('script');
    function injectThis() {
        window.print();
    }
    theScript.innerHTML = `window.onload = ${injectThis.toString()};`;
    theDoc.body.appendChild(theScript);
};

b64toBlob = (content, contentType) => {
    contentType = contentType || '';
    const sliceSize = 512;
     // method which converts base64 to binary
    const byteCharacters = window.atob(content); 

    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
    }); // statement which creates the blob
    return blob;
};
0
ответ дан 26 November 2019 в 22:28
поделиться

Возможно, вы захотите исследовать возможность использования URI данных. Это будет выглядеть примерно так.

window.open("data:application/pdf," + escape(pdfString));

Мне не сразу удалось заставить это работать, возможно, из-за форматирования предоставленной двоичной строки. Я также обычно использую данные в кодировке base64 при использовании URI данных. Если вы можете передать содержимое из бэкенда в кодировке, вы можете использовать...

window.open("data:application/pdf;base64, " + base64EncodedPDF);

Надеюсь, это правильное направление для того, что вам нужно. Также обратите внимание, что это не будет работать в IE6/7, потому что они не поддерживают URI данных.

19
ответ дан 26 November 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: