使用silverlight从url下载pdf文件

时间:2014-12-22 12:08:25

标签: c# asp.net silverlight pdf itextsharp

我在一个网址中有pdf文件,而我正在寻找的是点击 silverlight 创建一个按钮,下载此PDF文件

PDF的网址下载此文件(如果我们使用浏览器)女巫是在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();

1 个答案:

答案 0 :(得分:0)

您发布此问题的人犯了类似的错误:How to convert a pdf generating in response.outputStream to a Base64 encoding

首先告诉iTextSharp将PDF语法直接写入Outputstream的{​​{1}}:

Response

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

Outputstream

pdfDoc.Close(); 行后面的所有内容都发生得太晚了:

  • 在内容写入Close后,您无法设置标题
  • Response.OutputStream关闭后,您无法添加额外的内容

此外,您正在将对象Response.OutputStream转换为字节数组,但我们没有看到您在任何位置向此ms添加任何字节。

最后,问题很严厉。

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