В этом видео я покажу, как реализовать кастомную кнопку для отправки документа на печать напрямую из интерфейса элмы, без предварительного скачивания файла на устройство.
Все подробности в ролике, а ниже код, используемый в видео.
Разметка для кнопки "Печать":
HTML:
<% if (Context.data.print_form) { %>
<button style="margin: 10px 0" type="button" title="" class="btn btn-primary" onclick="<%= Scripts %>.print()">
<i class="elma-icons">print</i> Печать
</button>
<% } %>
<style>
.icon-wrapper {
display: flex;
cursor: pointer;
margin-left: 15px;
}
.print_form-wrapper {
display: flex;
align-items: center;
}
</style>
Код из вкладки "Скрипты":
Код:
let iframe: any
declare const console: any, window: any, document: any, URL: any;
async function print(): Promise<void> {
if (!Context.data.print_form) return
if (iframe) {
try {
document.body.removeChild(iframe)
} catch (e) { }
}
let pdf_file = await System.converter.toPdf(Context.data.print_form.id)
let link = await pdf_file.getDownloadUrl();
const response = await fetch(link)
const blob = await response.blob();
await printFile(blob)
}
async function printFile(blob: Blob): Promise<void> {
try {
const url = URL.createObjectURL(blob);
iframe = document.createElement("iframe");
iframe.style.display = "none";
document.body.appendChild(iframe);
iframe.src = url;
iframe.addEventListener("load", () => {
iframe.contentWindow?.print();
URL.revokeObjectURL(url);
});
} catch (e) {
console.log("Произошла ошибка: ", e.message);
}
}
Еще больше полезной информации в ТГ канале WhatDaELMA365