2009-11-19 139 views
9

我想從我的asp.net mvc應用程序打印收據。現在我認爲我最好的選擇是創建PDF文件,這些文件在打印時很容易處理,因爲頁邊/頁眉/頁腳等等。從asp.net生成PDF文件mvc

我不希望讓他們配置他們的瀏覽器,以便他們可以打印我的收據,其中一些並不那麼聰明。

還有其他的選擇嗎?

什麼是最好的(免費)庫/ API從一個asp.net MVC應用程序

+2

重複:http://stackoverflow.com/questions/779430/asp-net-mvc-how-to-get -view-to-generate-pdf – 2009-11-19 02:30:44

+0

我可能不想在View上生成PDF,所以它不是同一個問題。 – hminaya 2009-11-19 02:37:49

+2

@hminaya:那麼它是一個http://stackoverflow.com/questions/1244109/generating-pdf-file-in-net – 2009-11-19 04:37:48

回答

7

我有很好的成功使用Report.net以及iTextSharp PDF格式創建條形碼標籤生成的PDF文件。特別是iTextSharp,這個API看起來很簡單,它在我們的ASP.NET MVC應用程序中運行良好。對iTextSharp沒有太多的文檔,所以你必須查看iText的java文檔(它是一個端口)。

獎勵:他們都是免費的!

+2

4.7版本後的iTextSharp發佈不是免費的,如果你是使用它們商業。許可證已更改。 – 2013-10-08 13:49:42

+0

你是如何得到Report.net與MVC合作的?我很努力地理解如何讓ViewPDF或ResponsePDF輸出轉換爲ActionResult。 – 2013-10-08 14:41:46

+0

以上關於使用Report.NET與MVC進行評論。查看我的答案,查看示例代碼。 – 2013-10-08 16:05:26

0

我會使用iTextSharp如果您正在尋找生成PDF打印,但至於其他選項去,爲什麼不只是使用CSS風格打印機友好的頁面選項?

+2

因爲我無法控制瀏覽器放在頁面的頁腳和頁眉上,如URL和其他東西... – hminaya 2009-11-19 13:10:25

9

使用Report.NET代碼返回在MVC動作他們的Hello World例子:

public void MyPDFAction() 
    { 
     Root.Reports.Report report = new Root.Reports.Report(new PdfFormatter()); 
     FontDef fd = new FontDef(report, "Helvetica"); 
     FontProp fp = new FontPropMM(fd, 25); 
     Page page = new Page(report); 
     page.AddCB_MM(80, new RepString(fp, "Hello World!")); 
     RT.ViewPDF(report, "HelloWorld.pdf"); 
    } 

動作的返回類型爲無效,因爲Report.NET代碼直接更新響應,默認情況下返回的響應爲無效操作。這直接從瀏覽器打開一個pdf查看器。

獲得響應返回一個頁面,而不是下載替換

RT.ResponsePDF(report, System.Web.HttpContext.Current.Response); 

但是這種方法被標記的RT.ViewPDF線有利於與System.Web.UI程序交易的一個棄用。頁。不幸的是,我不知道如何處理MVC應用程序中的頁面對象。

我一直無法讓Report.NET啓動PDF文件的下載。

下載報告.NET here

編輯我最近發現了PDFSharp,它似乎比Report.NET更近的維護。它也可以在MIT許可下獲得。您可以從here下載。還有一個廣泛的wiki有很多例子。

Basic代碼返回一個文件,如MVC下載:

[HttpGet] 
    public ActionResult MyPdfAction() 
    { 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      PdfDocument document = new PdfDocument(); 
      PdfPage page = document.AddPage(); 
      XGraphics gfx = XGraphics.FromPdfPage(page); 
      XFont font = new XFont("Verdana", 20, XFontStyle.Bold); 
      gfx.DrawString("Hello, World!", font, XBrushes.Black, new XRect(0, 0, page.Width, page.Height), XStringFormats.Center); 
      document.Save(stream, false); 
      return File(stream.ToArray(), "application/pdf", "HelloWorld.pdf"); 
     } 
    } 

另一個編輯如果你在生產具有表主要是基於文本的文件有趣的,這是值得檢查MigraDoc,因爲它提供一個位於PDFSharp基元頂部的有用抽象層。 MigraDoc包含在PDFSharp下載中。您需要將PDFSharp,PDFSharp.Charting,MigraDoc.DocumentObjectModel和MigraDoc.Rendering項目添加到您的項目中才能使其工作。

代碼生成PDF在這裏下載:

[HttpGet] 
    public ActionResult MyPdfAction() 
    { 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      Document document = CreateDocument(); 
      document.UseCmykColor = true; 
      const bool unicode = false; 
      const PdfFontEmbedding embedding = PdfFontEmbedding.Always; 
      PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(unicode, embedding); 
      pdfRenderer.Document = document; 
      pdfRenderer.RenderDocument(); 
      pdfRenderer.PdfDocument.Save(stream, false); 
      return File(stream.ToArray(), "application/pdf", "HelloWorld.pdf"); 
     } 
    } 


    /// <summary> 
    /// Creates an absolutely minimalistic document. 
    /// </summary> 
    static Document CreateDocument() 
    { 
     Document document = new Document(); 
     Section section = document.AddSection(); 
     Paragraph paragraph = section.AddParagraph(); 
     paragraph.Format.Font.Color = Color.FromCmyk(100, 30, 20, 50); 
     paragraph.AddFormattedText("Hello, World!", TextFormat.Bold); 
     return document; 
    } 

摘要說完看了一些PDF解決方案,爲C#MVC,我使用PDFSharp/MigraDoc。我已經打折了iTextSharp和基於它的項目,因爲如果您在商業上使用它(如果是我的情況,則爲2500歐元),因爲許可費用昂貴。 Report.NET是在ASP.NET經典的基礎上開發的,自2006年以來一直未收到更新。