У меня грубое правило большого пальца
. Функциональность: может быть разной во всех частях: интерфейс.
. Данные и функциональные возможности будут в основном одинаковыми, детали разные: абстрактный класс.
Данные и функциональность, фактически работающие, если расширены только с небольшими изменениями: обычный (конкретный) класс
Данные и функциональность, никаких изменений не запланировано: обычные ( конкретный) класс с окончательным модификатором.
Данные и, возможно, функциональность: только для чтения: перечисляемые члены.
Это очень грубо, готово и совсем не строго определено, но есть спектр от интерфейсов, где все предназначено для изменения в перечислениях, где все исправлено немного как файл только для чтения.
используйте функцию "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;
};
Возможно, вы захотите исследовать возможность использования URI данных. Это будет выглядеть примерно так.
window.open("data:application/pdf," + escape(pdfString));
Мне не сразу удалось заставить это работать, возможно, из-за форматирования предоставленной двоичной строки. Я также обычно использую данные в кодировке base64 при использовании URI данных. Если вы можете передать содержимое из бэкенда в кодировке, вы можете использовать...
window.open("data:application/pdf;base64, " + base64EncodedPDF);
Надеюсь, это правильное направление для того, что вам нужно. Также обратите внимание, что это не будет работать в IE6/7, потому что они не поддерживают URI данных.