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
只要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();
}
}