如何打开PDF文件在一个新的选项卡或窗口,而不是下载(使用asp.net)?

这是下载文件的代码。

System.IO.FileStream fs = new System.IO.FileStream(Path+"\\"+fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); byte[] ar = new byte[(int)fs.Length]; fs.Read(ar, 0, (int)fs.Length); fs.Close(); Response.AddHeader("content-disposition", "attachment;filename=" + AccNo+".pdf"); Response.ContentType = "application/octectstream"; Response.BinaryWrite(ar); Response.End(); 

当这个代码被执行时,它会要求用户打开或保存文件。 而不是我需要打开一个新的选项卡或窗口,并显示该文件。 我怎样才能做到这一点?

注意:

文件不需要位于网站文件夹中。 它可能位于其他文件夹中。

而不是加载到一个字节数组stream并将其写入响应stream,你应该看看HttpResponse.TransmitFile

 Response.ContentType = "Application/pdf"; Response.TransmitFile(pathtofile); 

如果您希望在新窗口中打开PDF,则必须在新窗口中打开下载页面,例如:

 <a href="viewpdf.aspx" target="_blank">View PDF</a> 

这可能有帮助

 Response.Write("<script>"); Response.Write("window.open('../Inventory/pages/printableads.pdf', '_newtab');"); Response.Write("</script>"); 
 Response.ContentType = contentType; HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=" + fileName); Response.BinaryWrite(fileContent); 

 <asp:LinkButton OnClientClick="openInNewTab();" OnClick="CodeBehindMethod".../> 

在javaScript中:

 <script type="text/javascript"> function openInNewTab() { window.document.forms[0].target = '_blank'; setTimeout(function () { window.document.forms[0].target = ''; }, 0); } </script> 

注意重置目标 ,否则像Response.Redirect所有其他调用将打开一个新的选项卡,这可能不是你想要的。

你必须创build另一个页面或通用处理程序与代码生成您的PDF。 然后,该事件被触发,并且该人被redirect到该页面。

你可以从你的MVC动作返回一个FileResult。

********************* MVC操作************

  public FileResult OpenPDF(parameters) { //code to fetch your pdf byte array return File(pdfBytes, "application/pdf"); } 

************** JS **************

使用formpost将您的数据发布到行动

  var inputTag = '<input name="paramName" type="text" value="' + payloadString + '">'; var form = document.createElement("form"); jQuery(form).attr("id", "pdf-form").attr("name", "pdf-form").attr("class", "pdf-form").attr("target", "_blank"); jQuery(form).attr("action", "/Controller/OpenPDF").attr("method", "post").attr("enctype", "multipart/form-data"); jQuery(form).append(inputTag); document.body.appendChild(form); form.submit(); document.body.removeChild(form); return false; 

您需要创build一个表单来发布您的数据,附加您的dom,发布您的数据,并删除表单您的文档正文。

但是,表单发布不会仅在EDGE浏览器上将数据发布到新选项卡。 但获取请求的作品,因为它只是打开一个包含查询string为您的行动参数的url的新标签。

使用这个代码。 这就像一个冠军。

 Process process = new Process(); process.StartInfo.UseShellExecute = true; process.StartInfo.FileName = outputPdfFile; process.Start();