Ser*_*rge 7 javascript asp.net pdf-generation
我有一个ASPX页面,其中包含许多字段,当我单击"导出到PDF"按钮时,它会生成PDF文档.
我现在想在JavaScript中使用"print PDF"按钮来执行以下操作:
w = window.open(?);
w.print();
w.close();
Run Code Online (Sandbox Code Playgroud)
其中,"?"
将执行相同的回发我的"导出为PDF"按钮.
小智 2
如果您需要将表单提交(回发)到新窗口,您可以尝试将表单目标更改为 fake,例如:
var form = $("form");
form.attr("target", "__foo");
Run Code Online (Sandbox Code Playgroud)
提交表格。
form.submit();
Run Code Online (Sandbox Code Playgroud)
并删除目标(setitmeout(,1) - 将事件放入js“事件队列”的末尾,在我们的例子中 - 在表单提交之后):
setTimeout(function () { form.removeAttr("target"); }, 1);
Run Code Online (Sandbox Code Playgroud)
另外,在提交之前,您可以尝试使用 __foo id 打开窗口以获得更多样式,并且表单将在此窗口中提交(回发),而不是新窗口:
var wnd = window.open('', '__foo', 'width=450,height=300,status=yes,resizable=yes,scrollbars=yes');
Run Code Online (Sandbox Code Playgroud)
但我不知道如何处理提交的窗口并捕获 onload 或 jquery 的就绪事件。如果您能做到,请分享解决方法并调用 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>
Run Code Online (Sandbox Code Playgroud)
这是 .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();
}
}
Run Code Online (Sandbox Code Playgroud)