我正在使用ASP.NET和C#。我正在生成pdf并使用
在页面加载上发送response.TransmitFile(file);
所以在此之后我需要关闭这个窗口。我尝试编写动态脚本来关闭,但是没有用。
在按钮上单击我正在使用此代码打开窗口。
window.open("Export.aspx?JobNumbers=" + jobnums,'',"resizable=0,scrollbars=0,status=0,height=200,width=500");
在export.cs的页面加载中我正在使用itextsharp创建pdf。然后使用this来进行缩放。在使用
动态单击的按钮的按钮上调用它。 string script = "var btn = document.getElementById('" + Button1.ClientID + "');";
script += "btn.click();";
Page.ClientScript.RegisterStartupScript(this.GetType(), "Eport", script, true);
这是按钮的onclick事件。
protected void StartExport(object sender, EventArgs e)
{
response.Clear();
response.ContentType = "application/pdf";
response.AddHeader("content-disposition", "attachment;filename=" + Path.GetFileName(strFilePath));
response.TransmitFile(strFilePath);
response.Flush();
}
在此之后,我需要关闭此export.aspx窗口,因为我使用了这个。
Page.ClientScript.RegisterStartupScript(this.GetType(), "Export", "window.onfocus=function(){window.close();}", true);
和
HttpContext.Current.Response.Write("<script>window.onfocus=function(){window.close();}</script>");
但没效果。
有可能吗?
答案 0 :(得分:1)
你应该尝试这样的事情:
<script>
$.get('/call/the/page.aspx'); // Send a request to the page from which you Transmit the file
window.setTimeOut(function() { window.close(); }, 5000);
</script>
这将在5秒后尝试关闭窗口,留下足够的时间开始下载。
你必须将它放在一个页面中,在弹出窗口中打开该页面,这样这个脚本就会执行,请求文件并自行关闭。
答案 1 :(得分:1)
在body标签html上你必须设置event unload =&#34; window.close()&#34; 。这对我有用
答案 2 :(得分:0)
我建议写一个HttpHandler:
/// <summary>
/// here is your server-side file generator
/// </summary>
public class export : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// get some id from query string
string someid = context.Request.QueryString["id"];
try
{
...
context.Response.ContentType = "application/pdf";
context.Response.HeaderEncoding = System.Text.Encoding.UTF8;
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.AppendHeader("Content-Disposition", "attachment; filename=filename.pdf");
context.Response.Write(yourPDF);
/* or context.Response.WriteFile(...); */
}
catch (Exception ex)
{
/* exception handling */
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
不要忘记在Web.config中注册它:
<system.webServer>
<handlers>
<add name="/export_GET" path="/export" verb="GET" type="YourNamespace.export" preCondition="integratedMode,runtimeVersionv4.0" resourceType="Unspecified" />
</handlers>
</system.webServer>
之后你只需要从这样的javascript调用这个处理程序:
ExportFile: function () {
...
var url = "http://" + window.location.hostname + ":4433/export?cid=" + id;
window.open(url);
}
它将显示您保存对话框而无需手动关闭新窗口(它将自动关闭)。
答案 3 :(得分:-1)
由于显然您无法关闭由于下载文件而导致浏览器创建的窗口(如下载文件列表/是否要打开提示)我假设问题是“如何关闭托管页面初始化了“获取PDF”操作。
由于页面无法知道文件下载的完成情况,如果下载完成,您可能需要询问服务器(即AJAX erquest) - 它需要一些服务器端代码来跟踪下载(并且您可能需要无法使用会话状态来存储下载状态,因为它将被锁定以用于其他请求)。当您确认下载完成后,您可以关闭窗口。请注意,用户打开的关闭窗口要么失败,要么至少显示出“你真的想要关闭”的确认......