PDF到MemoryStream然后回来

时间:2017-07-15 12:41:24

标签: c# memorystream pdfsharp

我使用PDFSharp生成了一个pdf。

我调用save方法,并将其保存到磁盘,文件很完美。

然后我需要将文件放入MemorySteam,准备将其发送到我的网站下载。但是,该文件最终无效。损坏。

因此,要查看它出错的地方,我已将文件放入MemoryStream,然后我尝试将该文件写入文件,以确认一切正常。它不是。

这里我将文件保存到磁盘,检查它(调试),然后将其放入流中:

            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;

然后我返回' 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很好。所以当我写入流并写入磁盘时,我做错了。为什么文件被破坏了?

1 个答案:

答案 0 :(得分:1)

我无法重现您的问题(PdfSharp 1.32.3057.0)。在我看来,你手动流复制过多了。

尝试以下代码,正确创建pdf,将其流式传输到MemoryStream,然后将其保存到文件中:

var pdf = new PdfSharp.Pdf.PdfDocument();

var page = pdf.AddPage();
var gfx = XGraphics.FromPdfPage(page);
var font = new XFont("Verdana", 20, XFontStyle.BoldItalic);
gfx.DrawString("Hello, World!", font, XBrushes.Black, new XRect(0, 0, page.Width, page.Height), XStringFormats.Center);

var ms = new MemoryStream();
pdf.Save(ms, false);
ms.Position = 0;

using (var file = File.OpenWrite("test.pdf"))
    ms.CopyTo(file); // no need for manual stream copy or buffers