2015-06-26 29 views
3

我用下面的代碼生成PDF,它是完美的工作,以節省服務器映射路徑上的PDF:如何使用iTextSharp的

string strQuery = "select * from userdata"; 
     SqlCommand cmd = new SqlCommand(strQuery); 
     DataTable dt = GetData(cmd); 

     //Create a dummy GridView 
     GridView GridView1 = new GridView(); 
     GridView1.AllowPaging = false; 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 

     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.pdf"); 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 
     GridView1.RenderControl(hw); 

     StringReader sr = new StringReader(sw.ToString()); 
     Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); 
     HTMLWorker htmlparser = new HTMLWorker(pdfDoc); 
     PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 
     pdfDoc.Open(); 

     htmlparser.Parse(sr); 
     pdfDoc.Close(); 

     Response.Write(pdfDoc); 
     Response.End(); 

它的作品好。但我可以將此pdf保存到服務器映射路徑中。

我在pdfDoc.Close()後面寫了下面的代碼:

String path = Server.MapPath("~/mypdf.pdf"); 

但它沒有將pdf保存到服務器映射路徑。

我該怎麼做?

+0

[將生成的pdf直接保存到服務器目錄文件夾而無需用戶提示]可能的重複(http://stackoverflow.com/questions/4253989/save-the-generated-pdf-directly-to-the-server-目錄 - 文件夾 - 沒有用戶 - 舞會) –

回答

5

您正在撰寫文檔下面的輸出流:Response.OutputStream

一旦你做pdfDoc.Close();,PDF格式字節都沒有了。

如果您想將PDF保存到服務器,那麼你需要替換下面的行:

PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 

這一行:

PdfWriter.GetInstance(pdfDoc, new FileStream(context.Server.MapPath("~") + "mypdf.pdf"); 

現在你的字節不會被髮送到瀏覽器,但PDF將在您的服務器上創建。

+0

這顯示錯誤 - PdfWriter.GetInstance(pdfDoc,新的FileStream(路徑); 它顯示'新Filestream'上的錯誤 – deepak

+0

我已編輯我的答案 –

+0

是我已解決與此代碼:'PdfWriter.GetInstance(pdfDoc,新的FileStream(路徑,FileMode.Create));' – deepak