2013-08-23 138 views
0

我正在使用iTextSharp创建一个PDF文件(我使用C#)。该文件创建正常;但是,它保存在一个文件夹中。该文件是为了响应链接按钮单击而创建的,我希望显示“打开/保存”对话框,而不是将文件保存在文件夹中。 我使用以下命令:iTextSharp:创建PDF文件时显示“打开/保存”对话框

using(MemoryStream ms = new MemoryStream()) 
{ 
    Document doc1 = new Document(); 
    PdfWriter pdfw = PdfWriter.GetInstance(doc1, ms); 
    doc1.open(); 
    string sPath = Server.MapPath("PDF/"); 
    string sFileName = "Something.PDF"; 

    // create the PDF content 

    doc1.Close(); 
    byte[] content = ms.ToArray(); 
    using (FileStream fs = FileStream.Create(sPath + sFileName)) 
    { 
     fs.Write(content, 0, (int)content.Length); 
    } 
} 

我这样做不对吗?它创建文件并将其保存在“blahblah/PDF”文件夹中,但不显示打开/保存对话框bx。

+0

你没有标记这个ASP.Net所以你在桌面应用程序中工作? –

+0

这是一个Web应用程序(.Net 3.5,C#2.0) – NoBullMan

回答

1

如果您已经有该文件,请使用Response.TransmitFile方法在用户的浏览器中刷新它。

Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AppendHeader("Content-Disposition", "attachment; filename=buylist.pdf"); 
Response.TransmitFile(Server.MapPath("~/myfile.pdf")); 
+0

谢谢Vahid。有没有办法做到这一点,而不是首先将文件保存到文件夹?我想知道如果100个用户点击链接同时创建PDF文件会发生什么情况,使用不同的标准来生成数据。 – NoBullMan

+1

而不是'Response.TransmitFile()'你可以使用'Response.BinaryWrite()'并直接传递你的字节数组到那个。 –

+0

非常好!这解决了它。它显示打开/保存而不需要先将文件写入文件夹。瓦希德的建议让我指出了正确的方向,而你的改变最终确定了它。 – NoBullMan