#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);