复制/克隆流循环...

时间:2012-11-07 22:38:15

标签: c# .net itextsharp

我在这个循环中从根本上做错了。第一次通过循环,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);

...

2 个答案:

答案 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);