1

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

这是使用 C# 和 .NET 4。

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

3 回答 3

6

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

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

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

PdfReader _srcDoc = new PdfReader(Properties.Resources.Resource1);
MemoryStream _output = new MemoryStream();
PdfStamper _scratchDoc = new PdfStamper(_srcDoc, _output);
于 2014-09-18T16:31:00.847 回答
-1

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

...
stream.Flush(); // Don't know if this is necessary
stream.Position = 0;
PdfReader reader = new PdfReader(stream.ToArray());
...
于 2013-10-22T13:52:53.060 回答
-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();
            }


        }
于 2013-02-18T15:09:04.707 回答