C# iTextSharp文件操作和显示到文件流结果

C# iTextSharp文件操作和显示到文件流结果,c#,itextsharp,C#,Itextsharp,我正在尝试使用iTextSharp打开一个PDF文件,向文件中添加一个数据集以预填充数据,然后将其保存到流中,以便向用户显示它。我不想将它保存到本地文件中。我不断收到错误“无法访问封闭流”。我无法找出哪个流是错误的 这是我的密码: public FileStreamResult PushDataIntoPDFStream(string filename) { var reader = new PdfReader(Path.Combine(Server.MapPath(path

我正在尝试使用iTextSharp打开一个PDF文件,向文件中添加一个数据集以预填充数据,然后将其保存到流中,以便向用户显示它。我不想将它保存到本地文件中。我不断收到错误“无法访问封闭流”。我无法找出哪个流是错误的

这是我的密码:

public FileStreamResult PushDataIntoPDFStream(string filename)
{     
     var reader = new PdfReader(Path.Combine(Server.MapPath(path), filename));
     var xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
          <form1>  
             <firstName>test</firstName>
             <lastName>user</lastName>
             <driveCar>0</driveCar>
             <gender>1</gender>
             <birthdate>2011-08-12</birthdate>
             <numPets>4</numPets>
          </form1>";

     using (var outstream = new MemoryStream())
     { 
          using (var stamper = new PdfStamper(reader, outstream))
          {
               var bytes = System.Text.Encoding.UTF8.GetBytes(xml);
               using (var ms = new MemoryStream(bytes))
               {
                    stamper.AcroFields.Xfa.FillXfaForm(ms);
               }
          }

          return new FileStreamResult(outstream, "application/pdf")
          {
                FileDownloadName = "file.pdf";
          };
     }      
  }
public FileStreamResult PushDataIntoPDFStream(字符串文件名)
{     
var reader=newpdfreader(Path.Combine(Server.MapPath(Path),filename));
var xml=@”
测试
用户
0
1.
2011-08-12
4.
";
使用(var outstream=new MemoryStream())
{ 
使用(var压模=新PdfStamper(读卡器,分流))
{
var bytes=System.Text.Encoding.UTF8.GetBytes(xml);
使用(var ms=新内存流(字节))
{
母版.AcroFields.Xfa.FillXfaForm(ms);
}
}
返回新文件streamresult(扩展,“应用程序/pdf”)
{
FileDownloadName=“file.pdf”;
};
}      
}

PdfStamper
在其内部输出流上具有
.CloseStream
属性;尝试将其设置为false:

using (var stamper = new PdfStamper(reader, outstream))
{
    stamper.Writer.CloseStream = false;

您是否尝试过使用
返回值带到
之外?@Nate是。我可以让它工作,如果我把它保存到一个文件,然后显示它,但我试图显示它而不保存它第一,到目前为止,没有任何组合工作。我有一种不好的感觉,我将不得不保存临时文件。这对我有用。但是,如果重新使用流,不要忘记调用outstream.Seek(0,SeekOrigin.Begin)。