5

谁能告诉我如何将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

4 回答 4

14

我已经从磁盘上的文件完成了这项工作——从内存流中发送数据应该没有太大的不同。除了数据本身之外,您还需要向浏览器提供两条元数据。首先,您需要提供数据的 MIME 类型(在您的情况下是application/pdf),然后在 Content-Length 标头中提供数据的大小(以字节(整数)为单位),然后发送数据本身。

总而言之(考虑到评论以及我认为您要问的内容,您的标记将如下所示:

<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();
}
于 2013-04-24T15:26:16.503 回答
1

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

您的用户还应该安装某种 pdf 阅读器才能正常工作。

于 2013-04-24T14:03:58.063 回答
0

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

于 2013-04-24T14:09:29.467 回答
0

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

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

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

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

于 2017-07-31T22:07:34.420 回答