2013-03-25 98 views
0

我已經使用itextsharp生成PDF並將其保存在我們的本地服務器中。我想在另一個按鈕點擊下載此PDF。代碼生成PDF工作properly.Downloading發生,但一些錯誤ocuured試圖打開它。「因爲它要麼是不支持的文件類型,或者文件已損壞使用ITextSharp創建PDF成功但很難打開下載PDF

protected void createpdf_Click(object sender, EventArgs e) 
{ 
    fs = new FileStream(Server.MapPath("pdf") + "\\" + "First PDF document.pdf",  FileMode.Create); 

    document = new Document(PageSize.A4, 25, 25, 30, 30); 

    writer = PdfWriter.GetInstance(document, fs); 


    document.Open(); 

    document.Add(new Paragraph("Pdf Geneartion!")); 


    document.Close(); 

    writer.Close(); 

    fs.Close(); 
} 

代碼下載PDF

protected void download_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     fs = new FileStream(Server.MapPath("pdf") + "\\" + "FirstPDFdocument1.pdf", FileMode.Create); 

     document = new Document(PageSize.A4, 25, 25, 30, 30); 

     writer = PdfWriter.GetInstance(document, fs); 



     using (MemoryStream ms = new MemoryStream()) 
     { 
      document.Open(); 
      Response.Clear(); 

      Response.ContentType = "pdf/application"; 
      Response.AddHeader("content-disposition", "attachment;filename=PDFdocument1.pdf"); 

      Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); 
     } 
     writer.Close(); 
     fs.Close(); 
    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.ToString()); 
    } 

} 
+1

它看起來不像你曾經寫過任何'ms'。你在另一端得到一個0字節的文件嗎? – 2013-03-25 09:22:55

回答

0

一切看起來除了ContentType或多或少正確的應該是application/pdf,而不是pdf/application此外,作爲@lc指出,MemoryStream看起來並不像它被寫入嘗試這樣的事情,而不是:。

using (MemoryStream ms = new MemoryStream()) 
     { 
      PdfWriter.GetInstance(document, ms); // added 
      document.Open(); 
      Response.Clear(); 

      Response.ContentType = "application/pdf"; // changed 
      Response.AddHeader("content-disposition", "attachment;filename=PDFdocument1.pdf"); 

      Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); 
     }