2011-10-13 23 views
3

我使用Sharepoint 2010,我正在開發一個Web部件,在按鈕單擊事件時,需要生成並直接打開一個PDF文件。不應該保存到磁盤上。 我嘗試下面的代碼通過代碼直接打開生成的pdf文件,而不是將其保存到磁盤上

protected void Button1_OnClick(object sender, EventArgs e) 
    { 
     Document myDoc = new Document(PageSize.A4.Rotate()); 
     try 
     { 
      PdfWriter.GetInstance(myDoc, new FileStream(@"C:\Directory\Test.pdf", FileMode.Create)); 
      myDoc.Open(); 
      myDoc.Add(new Paragraph("Hello World")); 
     } 
     catch (DocumentException ex) 
     { 
      Console.Error.WriteLine(ex.Message); 
     } 
     myDoc.Close(); 
    } 

我也試過下面的代碼還生成我不想在服務器上的文件。

Document document = new Document(PageSize.A4); 
     PdfWriter.GetInstance(document, new FileStream(HttpContext.Current.Server.MapPath("~/Test.pdf"), FileMode.Create)); 
     document.Open(); 
     var WelcomePara = new Paragraph("Hello World"); 
     document.Add(WelcomePara); 
     document.Close(); 

這個在桌面上創建pdf文件,我需要它在pdf格式打開。可以有人幫助我。

回答

2

我終於得到它的工作。

using (var ms = new MemoryStream()) 
     { 
      using (var document = new Document(PageSize.A4,50,50,15,15)) 
      { 
       PdfWriter.GetInstance(document, ms); 
       document.Open(); 
       document.Add(new Paragraph("HelloWorld")); 
       document.Close(); 
      } 
      Response.Clear(); 
      //Response.ContentType = "application/pdf"; 
      Response.ContentType = "application/octet-stream"; 
      Response.AddHeader("content-disposition", "attachment;filename= Test.pdf"); 
      Response.Buffer = true; 
      Response.Clear(); 
      var bytes = ms.ToArray(); 
      Response.OutputStream.Write(bytes, 0, bytes.Length); 
      Response.OutputStream.Flush(); 
     } 
+0

你從哪裏得到你的'Response'? – Tomo

4

幾乎時間的東西接受FileStream實際上是真的接受通用System.IO.Stream對象,FileStream是的子類。這意味着,你可以改用其表弟System.IO.MemoryStream這是你在找什麼:

 byte[] bytes; 
     using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { 
      using (iTextSharp.text.Document doc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4.Rotate())) { 
       using (iTextSharp.text.pdf.PdfWriter w = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, ms)) { 
        doc.Open(); 
        doc.NewPage(); 
        doc.Add(new iTextSharp.text.Paragraph("Hello world")); 
        doc.Close(); 
        bytes = ms.ToArray(); 
       } 
      } 
     } 
     //Do whatever you want with the byte array here 

您不必創建字節數組,如果你不想,我只是展示如何創建PDF和給你一些「類似.net」的東西供你使用。

+0

感謝您的回覆。我試了上面的代碼,按鈕上點擊它仍然沒有打開PDF文件「Hello World」。還有什麼要做的嗎?請幫我... – Janet

0

這適用於我。

using (var ms = new MemoryStream()) 
    { 

     using (var document = new Document(PageSize.A4,50,50,15,15)) 
     { 

     // step 2 
     PdfWriter writer = PdfWriter.GetInstance(document, ms); 


     // step 3 
     document.Open(); 

     // XML Worker 
     XMLWorker worker = new XMLWorker(css, true); 
     XMLParser p = new XMLParser(worker); 
     p.Parse(new StringReader(--Your HTML--)); 


     // step 5 
     document.Close(); 
     } 
     Byte[] FileBuffer = ms.ToArray(); 
     if (FileBuffer != null) 
     { 
      Response.ContentType = "application/pdf"; 
      Response.AddHeader("content-length", FileBuffer.Length.ToString()); 
      Response.BinaryWrite(FileBuffer); 
     } 

    } 
相關問題