2013-02-18 70 views
0

任何人都可以給我一個如何從MemoryStream獲取PdfReader的例子嗎?我可以看到PdfReader類有幾個看起來可能候選的方法(GetStreamBytes & GetStreamBytesRaw),但是這些似乎想要iText特定的流,我的只是一個常規的Byte []或MemoryStream。來自MemoryStream的PdfReader()

這是使用C#和預先.NET4

iTextSharp.text.pdf.PdfReader rdr = iTextSharp.text.pdf.PdfReader.GetStreamBytesRaw 

感謝。

+0

什麼意思是來自memorystream的pdfreader?你是否試圖從已有的字節 – Zaki 2013-02-18 14:59:04

+0

生成pdf,我有同樣的問題。你找到解決方案嗎? – 2013-07-25 10:00:23

回答

-3

如果你想只使用瀏覽器的字節中打開PDF,然後做到這一點:

public void ReturnPDF(byte[] contents, string attachmentFilename) 
     { 
      var response = HttpContext.Current.Response; 
      try 
      { 
       if (!string.IsNullOrEmpty(attachmentFilename)) 
       { 
        response.ContentType = "application/pdf"; 
        response.AddHeader("Content-Disposition", "attachment; filename=" + attachmentFilename); 
       } 

       response.ContentType = "application/pdf"; 
       response.BinaryWrite(contents); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
      finally 
      { 
       response.End(); 
       response.Flush(); 
       response.Clear(); 
      } 


     } 
+0

我有一個內存中的pdf,我需要用PdfReader讀取它。 PdfReader rdr = new PdfReader(pdfstream);拋出「找不到PDF標頭簽名」錯誤。 – Dave 2013-02-18 15:52:26

+0

這通常意味着pdf文件已損壞 – Zaki 2013-02-18 16:47:25

+0

不確定問題在之前的版本中是否不明確,但此答案似乎並不適用。 – 2013-07-25 09:59:42

-1

也許有點晚了。 嘗試將流位置設置爲0。

... 
stream.Flush(); // Don't know if this is necessary 
stream.Position = 0; 
PdfReader reader = new PdfReader(stream.ToArray()); 
... 
+1

PdfReader是一個靜態類。而不是'新的PdfReader(stream.ToArray)'它現在是'PdfReader.Open(流)' – MushinNoShin 2016-02-23 21:16:06

3

您可以創建一個MemoryStream一個PdfReader,只要將MemoryStream是一個有效的PDF對象。如果將MemoryStream是有效的PDF對象,則一個以發起PdfReader方式是這樣的:

PdfReader _reader = new PdfReader((byte[])_memoryStream.ToArray()); 

在下面的代碼,所述PdfReader從調用時被返回作爲字節[]的.Net資源初始化從Properties.Resources對象,所以資源和M​​emoryStream返回相同的類型到PdfReader,一個字節[]。然後,我從PdfReader對象創建一個PdfStamper對象,並使用一個MemoryStream作爲PdfStamper的結果容器。

PdfReader _srcDoc = new PdfReader(Properties.Resources.Resource1); 
MemoryStream _output = new MemoryStream(); 
PdfStamper _scratchDoc = new PdfStamper(_srcDoc, _output);