Откройте PDF-файл в новом окне, распечатайте этот PDF-файл и закройте окно. Как это сделать в javascript

#javascript #pdf

#javascript #PDF

Вопрос:

Откройте PDF-файл в новом окне, распечатайте этот PDF-файл и закройте окно. Как это сделать в javascript. Эти 3 шага должны быть выполнены в один клик.

Ответ №1:

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

Комментарии:

1. Достаточно просто открыть диалоговое окно печати. После того, как пользователь нажмет кнопку печати в этом диалоговом окне печати, оно должно закрыться.

Ответ №2:

Существует два сценария: загрузка PDF-файла через запрос get или через запрос post (form); мой сценарий обращается к ним, вызывая диалоговое окно печати, а когда диалоговое окно печати закрыто, закрывая окно.

Для запроса get этого должно быть достаточно:

 function testprint(){
    var w = window.open(yourURL)
    w.focus()
    w.print()
    // Don't try to close it until you've give the window time to register the print dialog request
    setTimeout(function(){
        w.close() 
    }, 1000)
}
 

Сообщение немного сложнее. После того, как я некоторое время боролся с этой проблемой, вот что я придумал — он использует скрытый iframe; Я не мог заставить его работать с дополнительным окном. В результате вы можете скрыть iframe, чтобы пользователю даже не нужно было видеть другое окно. (Обратите внимание, вы можете преобразовать решение get для использования iframe, а также избежать дополнительного окна все вместе.) Предполагается, что вы создали форму с помощью jQuery, и результатом публикации будет нужный вам PDF.

 jQuery(document.body).append(form);
if (doPrint) {
    jQuery(document.body).append("<iframe style='display:none' id='doPrintId' name='doPrint'>");
    form.submit(function () {
        form.attr('target', 'doPrint');
    });
    var printWindow = document.getElementById('doPrintId');
    printWindow.onload = function(){
        printWindow.focus();
        printWindow.contentWindow.print();
        document.body.remove(printWindow);
    };

    form.submit();
} else {
    form.submit();
}

jQuery(document.body).remove(form);