将PDF传输到浏览器?

时间:2013-04-24 13:58:37

标签: c# asp.net pdf stream

有谁能请告诉我如何将pdf流式传输到新的标签浏览器?我只是在内存上有pdf流,当我点击链接在新标签页或窗口浏览器中显示PDF时我想要。 我怎么能这样做? 谢谢!

我有这个链接:

<a id="hrefPdf" runat="server" href="#" target="_blank"><asp:Literal ID="PdfName" runat="server"></asp:Literal></a>

在我的代码背后,我在onload事件中有这个:

                Stream pdf= getPdf
                if (pdf != null)
                {
                    SetLinkPDF(pdf);
                }

    private void SetLinkPDF(IFile pdf)
    {
        hrefPdf.href = "MyPDF to the Browser"
        PdfName.Text = pdf.PdfName;      
    }

我必须处理流pdf(IFile包含PDF的名称,流,元数据等)

如果我点击在新浏览器上显示流,我该怎么办?

我有另一个问题,是OnClientClick =“aspnetForm.target ='_ blank';” timbck2建议我。我必须在新窗口中打开文件(图像或pdf),我该怎么办?不工作这个。谢谢!

Timbbck2我的asp代码是:

<asp:LinkButton runat="server" ID="LinkButtonFile" OnClick="LinkButtonFile_Click" OnClientClick="aspnetForm.target = '_blank';"></asp:LinkButton>

感谢!!!

4 个答案:

答案 0 :(得分:12)

我是从磁盘上的文件中完成此操作的 - 从内存流中发送数据应该不会有太大的不同。除了数据本身之外,您还需要向浏览器提供两个元数据。首先,您需要提供数据的MIME类型(在您的情况下它将是application/pdf),然后是Content-Length标头中的数据大小(以整数形式),然后自己发送数据。 / p>

总而言之(考虑到你要求的评论和我想的,你的标记看起来像这样:

<asp:LinkButton ID="whatever" runat="server" OnClick="lnkButton_Click" 
  OnClientClick="aspnetForm.target='_blank';">your link text</aspnet:LinkButton>

你的代码中的这几行C#代码应该可以(或多或少):

protected void lnkButton_Click(object sender, EventArgs e)
{
    Response.ClearContent();
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Disposition", "inline; filename=" + docName);
    Response.AddHeader("Content-Length", docSize.ToString());
    Response.BinaryWrite((byte[])docStream);
    Response.End();
}

答案 1 :(得分:1)

要直接在浏览器中显示pdf,您应该将响应的内容类型设置为application/pdf

您的用户还应安装某种pdf阅读器,以便工作。

答案 2 :(得分:0)

你试过Response.BinaryWrite ??您可能也想设置一些标题。

答案 3 :(得分:0)

最佳答案建议首先将流转换(转换)为byte [],然后将文件下载到服务器(来自它来自的任何流),然后将其发送到客户端。

如果您需要提供Stream作为某些外部服务的参数(例如我的Azure存储),您可以使用以下方法。

public ActionResult Coupons(string file)
{
    Response.AddHeader("Content-Disposition", "inline; filename=" + file);
    Response.ContentType = "application/pdf";
    AzureStorage.DownloadFile(file, Response.OutputStream);//second parameters asks for a 'Stream', you can use whatever stream you want here, just put it in the Response.OutputStream
    return new EmptyResult();
}

这将直接将文件传输到客户端(据我所知)。