Я модифицировал @BillPaetski ответ, чтобы использовать querySelector, добавить необязательный CSS, удалить принудительный тег H1 и сделать заголовок опционально указанным или вытащить из окна. Он также не авто-распечатывается и не подвергает внутренности, поэтому их можно отключить в функции обертки или по своему усмотрению.
Единственными двумя частными vars являются tmpWindow и tmpDoc, хотя я считаю, что доступ к названиям, css и элементу может варьироваться. Следует предположить, что все аргументы функции являются частными.
Код:function PrintElem(elem, title, css) {
var tmpWindow = window.open('', 'PRINT', 'height=400,width=600');
var tmpDoc = tmpWindow.document;
title = title || document.title;
css = css || "";
this.setTitle = function(newTitle) {
title = newTitle || document.title;
};
this.setCSS = function(newCSS) {
css = newCSS || "";
};
this.basicHtml5 = function(innerHTML) {
return '<!doctype html><html>'+(innerHTML || "")+'</html>';
};
this.htmlHead = function(innerHTML) {
return '<head>'+(innerHTML || "")+'</head>';
};
this.htmlTitle = function(title) {
return '<title>'+(title || "")+'</title>';
};
this.styleTag = function(innerHTML) {
return '<style>'+(innerHTML || "")+'</style>';
};
this.htmlBody = function(innerHTML) {
return '<body>'+(innerHTML || "")+'</body>';
};
this.build = function() {
tmpDoc.write(
this.basicHtml5(
this.htmlHead(
this.htmlTitle(title) + this.styleTag(css)
) + this.htmlBody(
document.querySelector(elem).innerHTML
)
)
);
tmpDoc.close(); // necessary for IE >= 10
};
this.print = function() {
tmpWindow.focus(); // necessary for IE >= 10*/
tmpWindow.print();
tmpWindow.close();
};
this.build();
return this;
}
Использование: DOMPrinter = PrintElem('#app-container');
DOMPrinter.print();
Для всех людей, которые столкнутся с этой проблемой, здесь есть простое решение: ОСУЩЕСТВЛЯЕТСЯ ОБРАБОТАТЬ СИГНАЛ СИГНАЛА И НЕ ИСПОЛЬЗУЙ Метод будет продолжать работать, т.е. метод, в котором был создан поток, не будет блокироваться. Это простое решение, с которым я не сталкивался. Таким образом, вместо использования: signal.pause()
используйте это: def start_server():
t_server = threading.Thread(target=server.start)
t_server.start()
# signal.pause()
signal.signal(signal.SIGINT, handler)
def handler(signum, frame):
... # do whaterver you want to do, throw an exception, close your resources etc.