我在这个循环中从根本上做错了。第一次通过循环,Stream工作正常,但后续循环失败,Stream被破坏。我知道我可能正在做些傻事。我尝试每次将updateTemplate设置为0,但InputStream不支持搜索。我基本上附加了多个表单,这些表单在这里填入List。任何建议都会受到赞赏,尤其是能够带来更好性能的建议。
...
files.Add(PDFhelper.fillTemplate(template, mappings));
foreach (Update u in myObject.Updates)
{
mappings = this.GenerateFieldMappings(u);
Stream output = new MemoryStream();
template.CopyTo(output);
files.Add(PDFhelper.fillTemplate(output, mappings)); //First time stream is good
}
return PDFhelper.MergeFiles(files);
...
答案 0 :(得分:0)
嗯,这是我发现的一个解决方案。虽然,我觉得它效率不高。它确实完成了工作。
files.Add(PDFhelper.fillTemplate(mainTemplate, mappings));
byte[] templateData = updateTemplate.ReadToEnd();
foreach (Update u in myobject.Updates)
{
mappings = this.GenerateFieldMappings(u);
MemoryStream output = new MemoryStream();
output.Write(templateData, 0, templateData.Length);
output.Position = 0;
files.Add(PDFhelper.fillTemplate(output, mappings));
}
return PDFhelper.MergeFiles(files);
答案 1 :(得分:0)
如果添加using
关键字或在循环结束时添加output.Dispose(),它是否有效?请参阅this link。
files.Add(PDFhelper.fillTemplate(template, mappings));
foreach (Update u in myObject.Updates)
{
mappings = this.GenerateFieldMappings(u);
using(Stream output = new MemoryStream())
{
template.CopyTo(output);
files.Add(PDFhelper.fillTemplate(output, mappings)); //First time stream is good
}
}
return PDFhelper.MergeFiles(files);