PDFSharpを使用してPDFを生成しました。PDFをMemoryStreamに転送してから
私はsaveメソッドを呼び出してディスクに保存し、ファイルは完璧です。
私はダウンロードするために私のウェブサイトに送るためにファイルをMemorySteamに取得する必要があります。ただし、ファイルは無効になります。腐敗している。
どこが間違っているのかを見るために、ファイルをMemoryStreamに入れてから、その蒸気をファイルに書き込んでみてください。そうではありません。
ここで私は(デバッグ)、それをチェックするために、ディスクにファイルをSAV、その後、ストリームにそれを置く:
document.Save("c:\\temp\\ggg.pdf");
MemoryStream ms = new MemoryStream();
document.Save(ms, false);
byte[] buffer = new byte[ms.Length];
ms.Seek(0, SeekOrigin.Begin);
ms.Flush();
ms.Read(buffer, 0, (int)ms.Length);
return ms;
私はその後、私の呼び出し元の関数に「ミリ秒」を返し、書き込みを試行ファイルへのストリーム:
var doc = GeneratePdf(1);
using (FileStream file = new FileStream("c:\\temp\\222.pdf", FileMode.Create, System.IO.FileAccess.Write))
{
byte[] bytes = new byte[doc.Length];
doc.Read(bytes, 0, (int)doc.Length);
file.Write(bytes, 0, bytes.Length);
doc.Close();
}
しかし、222.pdfは有効なpdfではありません。 ggg.pdfは問題ありませんでした。だから、ストリームに書き込んでディスクに書き込むときに、私は間違ったことをしています。ファイルが壊れているのはなぜですか?
:
正しくPDFファイルを作成する次のコードを、試してみてください、それをファイルに保存し
MemoryStream
へと比べて、それをストリーミング? –@ IanH.-わかりません。私はそれが "ms.Read(バッファ、0、(int)ms.Length);"だと思ったが、はっきりしない?あなたは問題を発見したかもしれません。 – Craig
これらのストリームを手動でコピーするのではなく、単に 'Stream.CopyTo'を使うのはなぜですか?また、 'MemoryStream'に文書を保存した後の' Flush() 'と' Read(..) '*の目的は何ですか? –