我正在尝试将div复制到新窗口进行打印,这样做很好 但他复制的div没有附加任何风格。
$('#PrintNews').bind('click', function () {
var printContents = new $("#divToPrint").clone();
var myWindow = window.open("", "popup", "width=1000,height=600,scrollbars=yes,resizable=yes," +
"toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0");
var doc = myWindow.document;
doc.open();
$(printContents).find("#PrintNews").remove();
doc.write($(printContents).html());
doc.document.close();
doc.focus();
doc.print();
doc.close();
});
});
如何在新窗口中打开该div进行打印,但是他的所有样式都与原始div一样?
答案 0 :(得分:3)
你应该构建类似这样的新窗口的html,以链接外部css文件。
doc.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
doc.write("<html>");
doc.write("<head>");
doc.write("<link href='/css/print.css' rel='stylesheet' type='text/css' />"); // your css file comes here.
doc.write("</head>");
doc.write("<body>");
doc.write($(printContents).html());
doc.write("</body>");
doc.write("</html>");
答案 1 :(得分:1)
这取决于div的样式。如果基于ID或类应用样式,那么您应该可以在新窗口中包含相同的样式表。但是,如果任何样式都基于元素的祖先,那么它就变得棘手,因为你必须复制祖先元素才能应用精确的样式。
听起来你应该使用特定于打印的样式。您可以通过在样式表链接上包含media="print"
属性来应用样式表进行打印。然后,此样式表负责隐藏页面中您不想打印的任何元素,并定位您执行的那些元素。这样您就不会受到弹出窗口阻止程序的影响,并且可以减少用户打印文档的步骤。
您可以在原始样式表中使用媒体查询来实现相同目的。这是一个非常简单的例子:
@media print {
.print {width:100%;}
.noPrint {display:none;}
}
要测试这个,只需删除@media包装器,看看它在浏览器中的外观。它应该让你很好地了解页面在纸面上的外观。
答案 2 :(得分:1)
这是因为在打印之前没有加载样式。
var showPrintWindow = function (context) {
var printWindow = window.open('', '');
var doc = printWindow.document;
doc.write("<html><head>");
doc.write("<link href='/css/printReport.css' rel='stylesheet' type='text/css' media='print' />");
doc.write("</head><body>");
doc.write(context);
doc.write("</body></html>");
doc.close();
function show() {
if (doc.readyState === "complete") {
printWindow.focus();
printWindow.print();
printWindow.close();
} else {
setTimeout(show, 100);
}
};
show();
};
答案 3 :(得分:0)
将外部css包含在您要复制DIV的窗口中。否则只会复制内联样式。