PDF 到 MemoryStream 然后返回
PDF to MemoryStream and then back
我已经使用 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;
然后我 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 很好。所以当我写入流和写入磁盘时,我做错了什么。为什么文件会损坏?
我无法重现您的问题 (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
我已经使用 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;
然后我 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 很好。所以当我写入流和写入磁盘时,我做错了什么。为什么文件会损坏?
我无法重现您的问题 (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