Usando Report.NET el código para volver su ejemplo hola mundo en una acción MVC es:
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");
}
El tipo de retorno de la acción es nulo ya que el código Report.NET actualiza directamente la respuesta, que se devuelve por defecto para las acciones anuladas. Esto abre un visor de PDF directamente desde el navegador.
Para obtener la respuesta devuelta como una página en lugar de una descarga reemplazar la línea RT.ViewPDF con
RT.ResponsePDF(report, System.Web.HttpContext.Current.Response);
Sin embargo se marca este método como obsoleto en favor de la que se ocupa de System.Web.UI .Página. Lamentablemente, no sé cómo tratar con un objeto de página en el contexto de una aplicación de MVC.
No he podido obtener Report.NET para iniciar la descarga de un archivo PDF.
Descargar Report.NET here.
Editar Recientemente descubrí PDFSharp que parece ser más reciente que Report.NET. También está disponible bajo la licencia de MIT. Puede descargar desde here. También hay una extensa wiki con muchos ejemplos.
código básico para devolver un archivo como una descarga en 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");
}
}
Otra Editar Si usted es interesante en la producción de documentos en gran parte basada en texto con tablas, vale la pena echarle un vistazo MigraDoc ya que proporciona una capa de abstracción útil sobre las primitivas PDFSharp. MigraDoc está incluido en la descarga de PDFSharp. Deberá agregar los proyectos PDFSharp, PDFSharp.Charting, MigraDoc.DocumentObjectModel y MigraDoc.Rendering a su proyecto para que todo funcione.
código para generar un archivo PDF para su descarga aquí:
[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;
}
Resumen Después de examinar una serie de soluciones PDF para C# MVC, estoy usando PDFsharp/MigraDoc. He descontado iTextSharp y los proyectos basados en él debido a los altos costos de licencia si lo está usando comercialmente (€ 2500 en mi caso). Report.NET fue desarrollado teniendo en cuenta el clásico ASP.NET y no ha recibido una actualización desde 2006.
duplicado: http://stackoverflow.com/questions/779430/asp-net-mvc-how-toget -view-to-generate-pdf –
Puede que no desee generar el PDF en una vista, por lo que no es la misma pregunta. – hminaya
@hminaya: entonces es un duplicado de http://stackoverflow.com/questions/1244109/generating-pdf-file-in-net –