2009-11-19 29 views
9

Mi piacerebbe stampare le ricevute dalla mia app mdf asp.net. Per ora penso che la mia migliore opzione sia creare file PDF, che sono più facili da gestire quando li stamperanno, a causa dei margini/intestazioni/piè di pagina/ecc.Genera file PDF da asp.net mvc

Non voglio che configurino i loro browser solo in modo che possano stampare le mie ricevute, alcune non sono proprio così intelligenti.

Altre opzioni?

Qual è la migliore (gratuito) biblioteca/api per generare file PDF da un app MVC asp.net

+2

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

+0

Potrei non voler generare il PDF su una vista, quindi non è la stessa domanda. – hminaya

+2

@hminaya: quindi è un duplicato di http://stackoverflow.com/questions/1244109/generating-pdf-file-in-net –

risposta

7

Ho avuto un buon successo la creazione di etichette di codici a barre in formato PDF tramite Report.net così come iTextSharp. In particolare, per iTextSharp, l'API sembrava abbastanza semplice e funzionava bene nella nostra applicazione ASP.NET MVC. Non molta documentazione per iTextSharp quindi devi cercare la documentazione java per iText (che è una porta di).

Bonus: Sono entrambi gratuiti!

+2

Le versioni di iTextSharp successive alla versione 4.7 non sono gratuite se sei usandoli commercialmente. La licenza è cambiata. –

+0

Come hai fatto a Report.net lavorare con MVC? Sto faticando a capire come ottenere gli output ViewPDF o ResponsePDF per convertire in ActionResult. –

+0

Scratch il mio commento sopra sull'utilizzo di Report.NET con MVC. Vedi la mia risposta per esempio codice. –

0

Vorrei usare iTextSharp se stai cercando di generare PDF da stampare, ma per quanto riguarda altre opzioni, perché non usare semplicemente CSS per definire un'opzione di stampa della pagina?

+2

Perché non riesco a controllare ciò che il browser mette sul piè di pagina e sull'intestazione della pagina, come l'URL e cose ... – hminaya

9

Utilizzando Report.NET il codice di restituire il loro esempio ciao mondo in un'azione MVC è:

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

Il tipo restituito parte dell'azione è vuoto in quanto il codice Report.NET aggiorna direttamente la risposta, che viene restituita di default per le azioni void. Questo apre un visualizzatore pdf direttamente dal browser.

Per ottenere la risposta restituito come una pagina piuttosto che un download sostituire la linea RT.ViewPDF con

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

Tuttavia questo metodo è contrassegnato come deprecato in favore di colui che si occupa di System.Web.UI .Pagina. Purtroppo non so come gestire un oggetto Page nel contesto di un'app MVC.

Non riesco a ottenere da Report.NET l'avvio del download di un file PDF.

Download Report.NET here.

Modifica Ho scoperto di recente PDFSharp che sembra essere più recente di Report.NET. È anche disponibile con la licenza MIT. È possibile scaricare da here. C'è anche un ampio wiki con molti esempi.

codice di base per restituire un file come un download in 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"); 
     } 
    } 

Un altro Modifica se siete interessanti nella produzione di documenti in gran parte di testo base con tavoli, vale la pena di verificare MigraDoc in quanto fornisce un utile livello di astrazione sopra i primitivi PDFSharp. MigraDoc è incluso nel download di PDFSharp. Avrai bisogno di aggiungere i progetti PDFSharp, PDFSharp.Charting, MigraDoc.DocumentObjectModel e MigraDoc.Rendering al tuo progetto per far funzionare tutto.

codice per generare un PDF per il download qui:

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

Sommario Dopo aver esaminato una serie di soluzioni PDF per C# MVC, sto usando PDFsharp/MigraDoc. Ho scontato iTextSharp e progetti basati su di esso a causa dei costosi costi di licenza se lo si utilizza commercialmente (€ 2500 nel mio caso). Report.NET è stato sviluppato pensando a ASP.NET classic e non ha ricevuto aggiornamenti dal 2006.

Problemi correlati