2009-11-19 108 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年以来一直未收到更新。