0

このループ内で根本的に間違ったことをしています。ループを初めて通過するとき、ストリームは正常に動作しますが、その後ループを通過すると、ストリームが破損して失敗します。私はおそらく何か愚かなことをしていることを知っています。毎回 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);

...
4

2 に答える 2

0

キーワードを追加するusingか、ループの最後に output.Dispose() を追加すると機能しますか? このリンクを参照してください。

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);
于 2012-11-09T23:01:46.353 に答える
0

さて、ここに私が見つけた1つの解決策があります。ただし、あまり効率的ではありません。それは仕事を成し遂げます。

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);
于 2012-11-07T22:59:44.140 に答える