我的网络应用程序(java,jsp,js)中有一个按钮,它允许通过从屏幕的选定区域获取HTML进行打印,并将其放在名为“iFramePrint”的iframe中然后打印它。
<iframe name="iFramePrint" frameborder="0" src="Blank.jsp" marginheight="0" marginwidth="0" width="0" height="0"></iframe>
function doPrint() {
if (window.frames['iFramePrint'].document.body) {
var str = '<B>'+'<h1>' + document.getElementById('tdMainTitle').innerHTML +'</h1>'+'</B>';
str += '<BR>';
etc.
str=str.replace(/BORDER=0/g ,"border=1");
window.frames['iFramePrint'].document.body.innerHTML = str;
window.frames['iFramePrint'].focus();
window.frames['iFramePrint'].print();
}
}
这在很长一段时间内都运行良好,但是由于最近的Windows Update,代码不再有效。见下文。
我最好不要等待微软解决这个问题 - 可能还需要一段时间。而且我不想要求客户端卸载KB4022715(知识库编号因Windows版本而异,但一般来说这是本月发布的7月安全更新汇总),这确实解决了问题。
我有一个解决方案如何解决这个问题 - 获取HTML并将其转换为PDF,然后允许用户下载PDF,这绝对是可行的。见Converting HTML files to PDF - 只是想知道是否有更好的方法。
答案 0 :(得分:0)
到目前为止,我找到的最佳解决方案是用新窗口替换iFramePrint。
function doPrint() {
var str = '<B>'+'<h1>' + document.getElementById('tdMainTitle').innerHTML +'</h1>'+'</B>';
str += '<BR>';
etc.
str=str.replace(/BORDER=0/g ,"border=1");
w=window.open();
w.document.write('<html><head><title>Printout</title>');
w.document.write('</head><body >');
w.document.write(str);
w.document.write('</body></html>');
w.document.close();
w.focus();
w.print();
w.close();
}
感谢window.print() not working in IE中的@pratik和How to print HTML content on click of a button, but not the page?中的@jaay 还有其他答案可能会在没有打开新窗口的情况下完成。