2013-08-23 6 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

Это веб-приложение (.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

Thanks Vahid. Есть ли способ сделать это, не сохраняя сначала файл в папке? Интересно, что произойдет, если 100 пользователей нажимают на ссылку для создания файла PDF в одно и то же время, используя разные критерии для генерации данных. – NoBullMan

+1

Вместо 'Response.TransmitFile()' вы можете использовать 'Response.BinaryWrite()' и передать свой массив байтов непосредственно на это. –

+0

Отлично! Это решило. Он отображает Open/Save, не требуя сначала записать файл в папку. Предложение Вахида указало мне в правильном направлении, и вы изменили его. – NoBullMan