打开一个包含ASPX回发结果的弹出窗口
当我点击“导出为PDF”按钮时,我有一个ASPX页面,其中包含许多生成PDF文档的字段。
我现在想在JavaScript中有一个“打印PDF”按钮,它可以这样做:
w = window.open(?);
w.print();
w.close();
哪里"?"
将执行与我的“导出为PDF”按钮相同的回发。
如果您需要将表单提交(回发)到新窗口,您可以尝试将表单目标更改为假,如:
var form = $("form");
form.attr("target", "__foo");
提交表格。
form.submit();
并且移除目标(setitmeout(,1) - 在js“event-queue”结尾处填入事件,在我们的例子中 - 在表单提交之后):
setTimeout(function () { form.removeAttr("target"); }, 1);
另外,在提交之前,您可以尝试使用__foo id打开窗口以获取更多样式,并且将在此窗口中提交(回传)窗体而不是新窗体:
var wnd = window.open('', '__foo', 'width=450,height=300,status=yes,resizable=yes,scrollbars=yes');
但我不知道如何处理提交的窗口并捕获onload或jquery的ready事件。 如果你可以这样做,请分享解决方法,并打电话给wnd.print(); 你可以在这个wnd里玩iframe,也许你会找到一个解决方案。
更新:
试着看看这个原型[在Chrome中测试]:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.0.min.js"></script>
<script type="text/javascript">
function PrintResult() {
var wnd, checker, debug;
debug = true;
// create popup window
wnd = window.open('about:blank', '__foo', 'width=700,height=500,status=yes,resizable=yes,scrollbars=yes');
// create "watermark" __loading.
wnd.document.write("<h1 id='__loading'>Loading...</h1>");
// submit form to popup window
$("form").attr("target", "__foo");
setTimeout(function() { $("form").removeAttr("target"); }, 1);
if (debug)
{
$("#log").remove();
$("body").append($("<div id='log'/>"));
}
// check for watermark
checker =
setInterval(function () {
if (debug) $("#log").append('. ');
try {
if (wnd.closed) { clearInterval(checker); return; }
// if watermark is gone
if (wnd.document == undefined || wnd.document.getElementById("__loading") == undefined) {
if (debug) $("#log").append(' printing.');
//stop checker
clearInterval(checker);
// print the document
setTimeout(function() {
wnd.print();
wnd.close();
}, 100);
}
} catch (e) {
// ooops...
clearInterval(checker);
if (debug) $("#log").append(e);
}
}, 10);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button runat="server" ID="ReportButton" OnClick="ReportRenderClick" Text="Export to PDF" OnClientClick="PrintResult()"/>
<asp:Button runat="server" Text="Just a button."/>
</div>
</form>
</body>
</html>
这里是.cs文件:
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ReportRenderClick(object sender, EventArgs e)
{
Response.Clear();
Thread.Sleep(2000);
Response.ContentType = "application/pdf";
Response.WriteFile("d:1.pdf");
//Response.ContentType = "image/jpeg";
//Response.WriteFile("d:1.jpg");
//Response.Write("Hello!");
Response.End();
}
}
用IFrame打开pdf窗口,你可以这样做:
父框架内容
<script>
window.onload=function() {
window.frames["pdf"].focus();
window.frames["pdf"].print();
}
</script>
<iframe name="pdf" src="url/to/pdf/generation"></iframe>
受此启发https://stackoverflow.com/a/9616706
在你的问题标签中你有asp.net标签,所以我想你可以访问某种ASP.NET服务器技术。
我会建议这样做:
HttpHandler
或一个返回FileContentResult
的ASP.NET MVC操作 在您的页面中,使用此代码下载并打印文件(实际在此处找到它,粘贴它以供将来参考!)
<a href="/path/to/file.pdf" onClick="window.print();return false">点击此处下载可打印版本</a>
在编写服务器端有一些很好的教程: