2012-10-12 40 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應用程序做到這一點? –

相關問題