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

时间:2011-11-28 09:50:49

标签: c# asp.net pdf stream

这是下载文件的代码。

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();

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

注意:

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

7 个答案:

答案 0 :(得分:17)

您应该查看HttpResponse.TransmitFile

,而不是将流加载到字节数组并将其写入响应流。
Response.ContentType = "Application/pdf";
Response.TransmitFile(pathtofile);

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

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

答案 1 :(得分:6)

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)都会在新标签页中打开,这可能不是您想要的。

答案 2 :(得分:3)

这可能会有所帮助

Response.Write("<script>");
Response.Write("window.open('../Inventory/pages/printableads.pdf', '_newtab');");
Response.Write("</script>");

答案 3 :(得分:1)

您必须使用代码创建另一个页面或通用处理程序以生成您的pdf。然后该事件被触发,该人被重定向到该页面。

答案 4 :(得分:0)

您可以从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;

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

但是,表单帖子不会仅在 EDGE浏览器上将数据发布到新标签页。但获取请求可以正常工作,只需打开包含操作参数查询字符串的网址的新标签页。

答案 5 :(得分:0)

这里我使用iTextSharp dll生成PDF文件。 我想打开PDF文件而不是下载它。 所以我使用下面的代码,这对我来说很好。 现在pdf文件在浏览器中打开,现在正在下载

        Document pdfDoc = new Document(PageSize.A4, 25, 10, 25, 10);
        PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
        pdfDoc.Open();
        Paragraph Text = new Paragraph("Hi , This is Test Content");
        pdfDoc.Add(Text);
        pdfWriter.CloseStream = false;
        pdfDoc.Close();
        Response.Buffer = true;
        Response.ContentType = "application/pdf";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.End();

如果要下载文件, 在此Response.ContentType =&#34; application / pdf&#34;;

之后添加以下行
Response.AddHeader("content-disposition", "attachment;filename=Example.pdf");   

答案 6 :(得分:-5)

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

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