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.
duplicato: http://stackoverflow.com/questions/779430/asp-net-mvc-how-to-get -view-to-generate-pdf –
Potrei non voler generare il PDF su una vista, quindi non è la stessa domanda. – hminaya
@hminaya: quindi è un duplicato di http://stackoverflow.com/questions/1244109/generating-pdf-file-in-net –