来自MemoryStream的PdfReader()

时间:2013-02-18 14:54:51

标签: c# itextsharp memorystream pdf-reader

有人能举例说明如何从MemoryStream中获取PdfReader吗?我可以看到PdfReader类有几个看起来可能是候选的方法(GetStreamBytes& GetStreamBytesRaw),但是这些似乎想要iText特定的流,我的只是一个常规的Byte []或MemoryStream。

这是使用C#和.net4

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

提前致谢。

3 个答案:

答案 0 :(得分:5)

只要MemoryStream是有效的PDF对象,您就可以从MemoryStream创建PdfReader。如果MemoryStream是一个有效的PDF对象,那么启动PdfReader的一种方法就是这样:

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

在下面的代码中,PdfReader是从.Net Resource初始化的,当从Properties.Resources对象调用时,它作为byte []返回,因此Resource和MemoryStream将相同的类型返回给PdfReader,一个字节[]。然后,我从PdfReader对象创建一个PdfStamper对象,并使用MemoryStream作为PdfStamper的结果容器。

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

答案 1 :(得分:-1)

也许有点晚了。 尝试将流位置设置为0。

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

答案 2 :(得分:-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();
            }


        }