2012-10-12 37 views
1

我在尝试创建一个PDF下面的代码:为什么MigraDoc在我的asp.net应用程序中生成一个空白pdf?

public static MemoryStream Test() 
    { 
     var document = new Document(); 
     document.Info.Title = "Test Report"; 
     document.Info.Subject = "blah"; 
     document.Info.Author = "Me"; 
     //new CoverPageSummarySection().AddToDocument(document, new int[0], 2004); 

     Style style = document.Styles["Normal"]; 
     style.Font.Name = "Times New Roman"; 
     style = document.Styles["Heading1"]; 
     style.Font.Name = "Tahoma"; 
     style.Font.Size = 14; 
     style.Font.Bold = true; 
     style.Font.Color = Colors.DarkBlue; 
     style.ParagraphFormat.PageBreakBefore = true; 
     style.ParagraphFormat.SpaceAfter = 6; 

     var section = document.AddSection(); 
     var p = section.AddParagraph("test"); 
     p.AddText("Testing 1234"); 

     var renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always); 
     renderer.Document = document; 
     renderer.RenderDocument(); 

     var ms = new MemoryStream(); 
     renderer.PdfDocument.Save(ms, false); 
     return ms; 
    } 

生成的PDF是空白。我可以查看这些属性,并且document.Info字段在我的PDF中正确显示,但我无法在我的页面上看到任何文本。

我在做什么错?


编辑:所以看起来这个问题似乎与保存到内存流有关。当我将 renderer.PdfDocument.Save(ms, false);替换为 renderer.PdfDocument.Save("e:\\test.pdf");时,它会将其正确保存在test.pdf中。

我的代码到内存流保存到asp.net输出为:

 var stream = TestReportGen.Test(); 

     // Set the content headers 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.Buffer = true; 
     HttpContext.Current.Response.ContentType = "application/pdf"; 
     HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=testReport.pdf"); 

     stream.WriteTo(HttpContext.Current.Response.OutputStream); 
     stream.Close(); 

     HttpContext.Current.Response.End(); 

是与我怎么发回的MemoryStream还是什么问题?

回答

1

大部分与流有关的问题都由Seek(0, SeekOrigin.Begin)解决。

+0

不,求似乎之前,我写不来解决问题:( – KallDrexx

1

我不是一个ASP.NET专家,但有正常工作的网络服务器样本包含具有PDFsharp:
http://www.pdfsharp.net/wiki/Clock-sample.ashx

我不知道它是否是失踪的content-length使其中的差别做。

Seek(0, SeekOrigin.Begin)在早期版本的PDFsharp中丢失,但在当前版本中自动完成。

2

假设你有一个有效的MigraDoc文件,下面应该工作:

PdfDocumentRenderer renderer = new PdfDocumentRenderer(true, PdfFontEmbedding.Always); 
renderer.Document = document; 
renderer.RenderDocument(); 

// Send PDF to browser 
MemoryStream stream = new MemoryStream(); 
renderer.PdfDocument.Save(stream, false); 
Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-length", stream.Length.ToString()); 
Response.BinaryWrite(stream.ToArray()); 
Response.Flush(); 
stream.Close(); 
Response.End(); 
+0

你将如何在MVC应用程序做到这一点? –

相关问题