PdfReader from MemoryStream()

本文关键字:MemoryStream from PdfReader | 更新日期: 2023-09-27 18:00:02

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

这是使用C#和.NET4。

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

PdfReader from MemoryStream()

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

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

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

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

可能有点晚了。尝试将流的位置设置为0。

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

如果您只想在浏览器中使用字节打开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();
            }

        }