有人能举例说明如何从MemoryStream中获取PdfReader吗?我可以看到PdfReader类有几个看起来可能是候选的方法(GetStreamBytes& GetStreamBytesRaw),但是这些似乎想要iText特定的流,我的只是一个常规的Byte []或MemoryStream。
这是使用C#和.net4
iTextSharp.text.pdf.PdfReader rdr = iTextSharp.text.pdf.PdfReader.GetStreamBytesRaw
提前致谢。
答案 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();
}
}