2009-11-19 16 views
9

Ich möchte Quittungen von meinem asp.net mvc app drucken. Für jetzt denke ich, meine beste Option ist es, PDF-Dateien zu erstellen, die einfacher zu handhaben sind, wenn sie gedruckt werden, wegen der Ränder/Kopf-/Fußzeilen/etc.Generieren Sie PDF-Dateien von asp.net mvc

Ich möchte nicht, dass sie ihre Browser nur so konfigurieren, dass sie meine Quittungen drucken können, einige von ihnen sind einfach nicht so schlau.

Weitere Optionen?

Was das Beste ist (kostenlos) Bibliothek/api PDFs aus einer asp.net Mvc app

+2

Duplikat erhalten: http://stackoverflow.com/questions/779430/asp-net-mvc-how-to-get -view-to-generate-pdf –

+0

Ich möchte vielleicht nicht die PDF in einer Ansicht erstellen, also ist es nicht die gleiche Frage. – hminaya

+2

@hminaya: dann ist es ein Duplikat http://stackoverflow.com/questions/1244109/generating-pdf-file-in-net –

Antwort

7

ich gute Erfolge gehabt haben zu generieren Erstellung Barcode-Etiketten im PDF-Format Report.net sowie iTextSharp verwenden. Insbesondere für iTextSharp schien die API einfach genug zu sein und in unserer ASP.NET MVC-Anwendung funktionierte sie gut. Nicht viel Dokumentation für iTextSharp, also müssen Sie die Java-Dokumentation für iText nachschlagen (wofür es ein Port ist).

Bonus: Sie sind beide frei!

+2

iTextSharp veröffentlicht im Anschluss an Version 4.7 ist nicht frei, wenn Sie mit ihnen kommerziell. Die Lizenz hat sich geändert. –

+0

Wie hast du Report.net mit MVC arbeiten lassen? Ich habe Mühe zu verstehen, wie man entweder die ViewPDF- oder ResponsePDF-Ausgaben in ein ActionResult konvertiert. –

+0

Scratch meinen Kommentar oben über die Verwendung von Report.NET mit MVC. Siehe meine Antwort für Beispielcode. –

0

Ich würde iTextSharp verwenden, wenn Sie PDFs zum Drucken erstellen möchten, aber so weit wie andere Optionen gehen, warum nicht einfach CSS verwenden, um eine druckerfreundliche Option der Seite zu stylen?

+2

Weil ich nicht das, was der Browser setzt auf der Fußzeile & Header der Seite, wie die URL und so steuern kann ... – hminaya

9

Report.NET mit dem Code ihrer Hallo Welt Beispiel in einer MVC-Aktion zurückkehren wird:

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"); 
    } 

Der Rückgabetyp der Aktion ist void, da der Report.NET-Code die Antwort direkt aktualisiert, die standardmäßig für ungültige Aktionen zurückgegeben wird. Dies öffnet einen PDF-Viewer direkt aus dem Browser.

die Antwort erhalten zurück eher als eine Seite als Download mit

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

jedoch diese Methode markiert die RT.ViewPDF Linie ersetzen zugunsten des einen veraltet, die mit System.Web.UI beschäftigt .Seite. Leider weiß ich nicht, wie ich mit einem Page-Objekt im Kontext einer MVC-App umgehen soll.

Ich konnte Report.NET den Download einer PDF-Datei nicht initiieren.

Download Bericht.NET here.

Bearbeiten Ich habe vor kurzem PDFSharp entdeckt, die in jüngerer Zeit als Report.NET gepflegt scheint. Es ist auch unter der MIT-Lizenz verfügbar. Sie können von here herunterladen. Es gibt auch eine umfangreiche wiki mit vielen Beispielen.

Basic-Code eine Datei als Download in MVC zurück:

[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"); 
     } 
    } 

Another bearbeiten Wenn Sie weitgehend interessant sind textbasierte Dokumente mit Tabellen in der Herstellung, es lohnt sich ist MigraDoc Check-out, wie es bietet eine nützliche Abstraktionsschicht über den PDFSharp-Primitiven. MigraDoc ist im PDFSharp Download enthalten. Sie müssen die Projekte PDFSharp, PDFSharp.Charting, MigraDoc.DocumentObjectModel und MigraDoc.Rendering Ihrem Projekt hinzufügen, damit alles funktioniert.

-Code ein PDF zum Download generieren hier:

[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; 
    } 

Zusammenfassung Nachdem für C# MVC in einer Reihe von PDF-Lösungen gesucht, ich bin PDFSharp/MigraDoc verwenden. Ich habe iTextSharp und darauf basierende Projekte aufgrund der teuren Lizenzkosten, die Sie kommerziell nutzen (in meinem Fall 2500 €), nicht berücksichtigt. Report.NET wurde mit ASP.NET klassisch im Verstand entwickelt und hat kein Update seit 2006

Verwandte Themen