我正在使用VB.NET将pdf文件直接写入浏览器,立即打开它替换当前窗口中的内容。我想要做的是设置一个参数,它将在新的选项卡/窗口中引起二进制写入。
' Set the appropriate ContentType.
Response.ContentType = "Application/pdf"
' Write file directly to browser.
Response.BinaryWrite(binaryData)
Response.End()
必须要设置一些能够在新窗口中编写二进制PDF的东西。像Response.Target =“_ blank”?????
答案 0 :(得分:6)
首先,创建一个名为“PDF.aspx”的附加页面或任何您想要的页面。
其次,在您的页面中,将“binarydata”变量存储在会话中。
Session("binaryData") = binarydata
告诉它转到你的新页面。
Response.Redirect("PDF.aspx")
第三,转到页面后面的PDF.aspx代码并输入以下内容:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
Response.ContentType = "Application/pdf"
Response.BinaryWrite(Session("binaryData"))
Response.End()
Catch ex As Exception
Throw ex
End Try
End Sub
这应该产生你想要的结果。 :)
答案 1 :(得分:1)
替代方案怎么样?向浏览器写入一些客户端脚本以打开新窗口/选项卡。
ClientScript.RegisterStartupScript(this.GetType(), "scriptkey", "window.open('MyPDFDisplayer.ashx');");
然后创建一个新的generic handler MyPDFDisplayer.ashx,将PDF写入窗口。
context.Response.ContentType = "application/pdf";
context.Response.BinaryWrite(binaryData);
context.Response.End();
我是C#家伙,所以你必须翻译,但这应该很容易。
答案 2 :(得分:0)
我知道这已经过时了但是我已经做了什么来实现OP。 (原谅我,因为这是C#,但它不应该太难转换)
这是我使用的原始代码,显示了与您描述的相同的行为!
Response.ClearContent();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "inline; filename=" + docName);
Response.AddHeader("Content-Length", byteArray.Length.ToString());
Response.BinaryWrite(byteArray);
Response.End();
我必须进行两项关键更改才能使其按照我想要的方式工作(将文件下载为PDF,然后在用户点击该附件时在新标签页中打开。)并且它们都在上面代码的第3行。
更改此
Response.AddHeader("Content-Disposition", "inline; filename=" + docName);
到此
Response.AddHeader("Content-Disposition", "attachment; filename=" + docName + ".pdf");
如果您将Content-Disposition指定为" Inline" ,它将在您当前窗口中输出文件内容。
您需要将此处置方式更改为" attachment" 并确保您的扩展名后缀明确设置为.pdf。