C# 使用silverlight从url下载pdf文件
我在一个URL中有一个pdf文件,我要找的是当我单击它下载这个pdf文件时,在silverlight中创建一个按钮 PDF的url下载此文件(如果我们使用浏览器),该文件在ASP.net中生成,代码如下: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,
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内容。