C# 使用silverlight从url下载pdf文件

C# 使用silverlight从url下载pdf文件,c#,asp.net,silverlight,pdf,itextsharp,C#,Asp.net,Silverlight,Pdf,Itextsharp,我在一个URL中有一个pdf文件,我要找的是当我单击它下载这个pdf文件时,在silverlight中创建一个按钮 PDF的url下载此文件(如果我们使用浏览器),该文件在ASP.net中生成,代码如下: var ms = new MemoryStream(); Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); PdfWriter.GetInstance(pdfDoc,

我在一个URL中有一个pdf文件,我要找的是当我单击它下载这个pdf文件时,在silverlight中创建一个按钮

PDF的url下载此文件(如果我们使用浏览器),该文件在ASP.net中生成,代码如下:

        var ms = new MemoryStream();

        Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
        PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
        pdfDoc.Open();
        pdfDoc.Add(new Paragraph("Welcome to dotnetfox"));

        iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(new Uri(url));
        pdfDoc.Add(jpg);
        pdfDoc.Close();

        Response.Clear();
        Response.ContentType = "application/octet-stream";
        Response.AddHeader("content-disposition", "attachment;" +
                                       "filename=demo.pdf");
        Response.Buffer = true;

        Response.Clear();
        ms.Position = 0;
        var bytes = ms.ToArray();
        Response.OutputStream.Write(bytes, 0, bytes.Length);

        Response.OutputStream.Flush();

您犯的错误与发布此问题的人相似:

您首先告诉iTextSharp将PDF语法直接写入
响应的
输出流中

PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
Outputstream
在此行中是自动关闭的

pdfDoc.Close();
以下
Close
行后面的一切都发生得太晚:

  • 将内容写入
    响应.OutputStream
    后,不能设置标题
  • 关闭
    响应.OutputStream
    后,不能添加额外内容
此外,您正在将对象
ms
转换为字节数组,但我们看不到您在任何地方向该
MemoryStream
添加任何字节

最后,这个问题措词不当

  • 当你说我在一个URL中有一个PDF文件时,人们会认为你在一个文件系统中有一个静态PDF文件,可以使用URL访问该文件系统。您的代码示例与此相矛盾。在代码示例中,您可以在web应用程序中动态创建PDF。这与在一个URL中包含PDF不同
  • 你说你想在Silverlight中有一个按钮,当有人点击它时可以下载PDF,但是我在任何地方都看不到提供这个按钮的任何代码。我猜你问题的这一部分无关紧要。您希望在web应用程序中创建PDF。如果您使用Silverlight中的浏览器或按钮从应用程序服务器获取此PDF,这对您来说可能并不重要。如果这个假设是错误的,那么您提供的代码示例是错误的。它是错误的,因为它永远不可能工作(原因在我的回答中解释),它是错误的,因为如果实际问题是按钮,而不是PDF,它是不相关的。如果您想从Silverlight中的URL获取文档,则不应将问题标记为PDF或iTextSharp问题。相反,您应该关注问题的本质:如何创建从服务器获取文档的按钮

你没有使用
内存流做任何事情,然后你得到这个空内存流的0字节并将它们发送到响应,你也只是扔掉了你正在做的所有PDF内容。