...

Печать файлов напрямую из интерфейса элмы

Тема в разделе "Примеры сценариев", создана пользователем ksannikov, 21 янв 2026.

  1. ksannikov

    ksannikov Активный участник

    В этом видео я покажу, как реализовать кастомную кнопку для отправки документа на печать напрямую из интерфейса элмы, без предварительного скачивания файла на устройство.
    Все подробности в ролике, а ниже код, используемый в видео.

    Разметка для кнопки "Печать":

    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 iframeany
    declare const consoleanywindowanydocumentanyURLany;

    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(blobBlob): 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