Вещь, которую я хочу создать, заключается в том, что нажав кнопку, я хочу запустить печать PDF файла, но не открывая его.
+-----------+
| Print PDF |
+-----------+
^ Click *---------> printPdf(pdfUrl)
Как я впервые попытался использовать iframe:
var $iframe = null;
// This is supposed to fix the onload bug on IE, but it not fired
window.printIframeOnLoad = function() {
if (!$iframe.attr("src")) { return; }
var PDF = $iframe.get(0);
PDF.focus();
try {
// This doesn't work on IE anyways
PDF.contentWindow.print();
// I think on IE we can do something like this:
// PDF.document.execCommand("print", false, null);
} catch (e) {
// If we can't print it, we just open it in the current window
window.location = url;
}
};
function printPdf(url) {
if ($iframe) {
$iframe.remove();
}
$iframe = $('<iframe>', {
class: "hide",
id: "idPdf",
// Supposed to be a fix for IE
onload: "window.printIframeOnLoad()",
src: url
});
$("body").prepend($iframe);
}
Это работает на Safari (настольном и iOS) и Chrome (можем ли мы обобщить его, возможно, на webkit?).
В Firefox PDF.contentWindow.print()
заканчивается ошибкой permission denied
(даже файл pdf загружается из того же домена).
В IE (11) обработчик onload
просто не работает.
Теперь, мой вопрос: есть ли еще один лучший способ распечатать PDF без визуального открытия его пользователю?
Здесь кросс-браузер очень важен. Мы должны поддерживать как можно больше браузеров.
Какой лучший способ достичь этого? Является ли мой старт хорошим? Как его завершить?
Теперь мы находимся в 2016 году, и мне кажется, что это все еще больно для реализации в браузерах.