2013-02-18 59 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);