Javascript 可靠地呈现PDF,当加载到网页上时会打开打印对话框
我有一个web页面(SSL),其中包含一个几乎不可见的iframe,其源是来自javaservlet的PDF流。几乎看不见的iframe的目的是呈现PDF,当页面加载时,它会立即打开一个打印对话框 这一过程是以零星的方式进行的。加载页面时,通常会正确显示PDF打印对话框。不过,有时,页面加载时不会呈现“PDF打印”对话框。我知道这在Javaservlet中不是问题,因为我可以从日志中验证PDF是否正确地流到调用页面。我需要找到一种方法,使其99.9999……%可靠,如果有可能的话,PDF打印对话框总是在页面加载时打开。所以,我正在寻找如何确保这一点的任何提示 这需要适用于Internet Explorer(特别是版本8) 这是打开包含PDF iframe的页面的JavaScript:Javascript 可靠地呈现PDF,当加载到网页上时会打开打印对话框,javascript,internet-explorer,pdf,Javascript,Internet Explorer,Pdf,我有一个web页面(SSL),其中包含一个几乎不可见的iframe,其源是来自javaservlet的PDF流。几乎看不见的iframe的目的是呈现PDF,当页面加载时,它会立即打开一个打印对话框 这一过程是以零星的方式进行的。加载页面时,通常会正确显示PDF打印对话框。不过,有时,页面加载时不会呈现“PDF打印”对话框。我知道这在Javaservlet中不是问题,因为我可以从日志中验证PDF是否正确地流到调用页面。我需要找到一种方法,使其99.9999……%可靠,如果有可能的话,PDF打印对话
function openPrintCheckWindow(){
pc=window.open("/print_check.jsp", "pc", "toolbar=no,scrollbars=no,resizable=no");
pc.resizeTo(1000,700);
pc.moveTo(80,80);
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
<style>
#createpdf {
position:absolute;
top:0;
right:0;
}
.micr {
font-family: "MICR Encoding", sans-serif;
font-size: 0.2in;
}
</style>
<script type="text/javascript">
function doAlert(msg){
if(msg.length>0){
alert(msg);
}
}
//doesn't block the load event
function createIframe(){
var i = document.createElement("iframe");
i.src = "/PrintCheckServlet";
i.width = "2px";
i.height = "2px";
document.getElementById("createpdf").appendChild(i);
};
// Check for browser support of event handling capability
if (window.addEventListener)
window.addEventListener("load", createIframe, false);
else if (window.attachEvent)
window.attachEvent("onload", createIframe);
else
window.onload = createIframe;
</script>
</HEAD>
<BODY BGCOLOR="#DFD9D0" TEXT="#000066" onLoad="doAlert('')">
<FORM METHOD="POST" TARGET="main_window" ACTION="ControllerServlet">
<P ALIGN="LEFT">
<INPUT TYPE="BUTTON" NAME="CLOSE" VALUE="Close"
onClick="this.form.submit();window.close();window.opener.focus();window=null;">
<br />
<H3 id="print_message">A print dialog box will show momentarily</H3>
</P>
<div id="createpdf"></div>
</FORM>
</BODY>
</HTML>
以下是包含PDF iframe的页面的源代码:
function openPrintCheckWindow(){
pc=window.open("/print_check.jsp", "pc", "toolbar=no,scrollbars=no,resizable=no");
pc.resizeTo(1000,700);
pc.moveTo(80,80);
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
<style>
#createpdf {
position:absolute;
top:0;
right:0;
}
.micr {
font-family: "MICR Encoding", sans-serif;
font-size: 0.2in;
}
</style>
<script type="text/javascript">
function doAlert(msg){
if(msg.length>0){
alert(msg);
}
}
//doesn't block the load event
function createIframe(){
var i = document.createElement("iframe");
i.src = "/PrintCheckServlet";
i.width = "2px";
i.height = "2px";
document.getElementById("createpdf").appendChild(i);
};
// Check for browser support of event handling capability
if (window.addEventListener)
window.addEventListener("load", createIframe, false);
else if (window.attachEvent)
window.attachEvent("onload", createIframe);
else
window.onload = createIframe;
</script>
</HEAD>
<BODY BGCOLOR="#DFD9D0" TEXT="#000066" onLoad="doAlert('')">
<FORM METHOD="POST" TARGET="main_window" ACTION="ControllerServlet">
<P ALIGN="LEFT">
<INPUT TYPE="BUTTON" NAME="CLOSE" VALUE="Close"
onClick="this.form.submit();window.close();window.opener.focus();window=null;">
<br />
<H3 id="print_message">A print dialog box will show momentarily</H3>
</P>
<div id="createpdf"></div>
</FORM>
</BODY>
</HTML>
#创建PDF{
位置:绝对位置;
排名:0;
右:0;
}
米克尔先生{
字体系列:“MICR编码”,无衬线;
字体大小:0.2英寸;
}
函数doAlert(msg){
如果(消息长度>0){
警报(msg);
}
}
//不阻止加载事件
函数createIframe(){
var i=document.createElement(“iframe”);
i、 src=“/PrintCheckServlet”;
i、 宽度=“2px”;
i、 高度=“2px”;
document.getElementById(“createpdf”).appendChild(i);
};
//检查浏览器是否支持事件处理功能
if(window.addEventListener)
addEventListener(“加载”,createIframe,false);
else if(窗口附件)
attachEvent(“onload”,createIframe);
其他的
window.onload=createIframe;
将立即显示打印对话框
假设查看您文件的人使用的是Acrobat Reader或其他“支持javascript”的PDF阅读器,您同意吗
如果是这种情况,您可以修改您的文件并
window=null;window.opener.focus()代码>--这似乎不是个好主意:-)2个想法。。。1.)你说你在SSL上提供这个。。。如果您有Internet Explorer用户,请确保不要明确拒绝HTTP头中的缓存—在某些情况下,IE会在加载文件之前删除该文件。2.)同样对于IE(这次是IE9及以上版本),IE改变了它的行为,在继续执行脚本内容之前,不等待弹出窗口完全加载。。。如果您的代码在启动弹出窗口后需要与之交互,请确保添加足够的延迟,以确保其存在并准备就绪。在调用window.opener.focus()
之前,将window
设置为null
,只会导致JavaScript错误,因此是:-)在不同的浏览器上会得到不同的结果吗?你说这是零星的-Chrome/FF/IE/Safari上的情况也是这样吗?刚刚更新的问题表明这是针对IE8的。我对这个问题的公认答案的第二部分很感兴趣-我想我会尝试一下。我正在使用iText创建PDF。在我的例子中,它被呈现为字节流,而根本没有保存(据我所知)。我目前正在使用该答案的第一种方法--writer.setOpenAction(action)代码>使用第二种方法可能更可靠。