我使用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很好。所以当我写入流并写入磁盘时,我做错了。为什么文件被破坏了?
答案 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