En utilisant Report.NET le code pour retourner leur exemple Bonjour tout le monde dans une action MVC est:
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");
}
Le type de retour de l'action est void car le code Report.NET met directement à jour la réponse, qui est renvoyée par défaut pour les actions annulées. Cela ouvre une visionneuse pdf directement à partir du navigateur.
Pour obtenir la réponse retournée comme une page plutôt qu'un téléchargement remplacer la ligne de RT.ViewPDF avec
RT.ResponsePDF(report, System.Web.HttpContext.Current.Response);
Cependant, cette méthode est marquée comme dépréciée en faveur de celui qui traite System.Web.UI .Page. Malheureusement, je ne sais pas comment traiter un objet Page dans le contexte d'une application MVC.
J'ai été incapable d'obtenir Report.NET pour lancer le téléchargement d'un fichier PDF.
Télécharger Report.NET here.
Édition J'ai récemment découvert PDFSharp qui semble être entretenu plus récemment que Report.NET. Il est également disponible sous licence MIT. Vous pouvez télécharger à partir de here. Il y a aussi un vaste wiki avec de nombreux exemples.
Code de base pour retourner un fichier en téléchargement dans 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");
}
}
Une autre Modifier Si vous êtes intéressant dans la production de documents en grande partie à base de texte avec des tables, il vaut bien vérifier MigraDoc car il fournit une couche d'abstraction utile au-dessus des primitives PDFSharp. MigraDoc est inclus dans le téléchargement PDFSharp. Vous devrez ajouter les projets PDFSharp, PDFSharp.Charting, MigraDoc.DocumentObjectModel et MigraDoc.Rendering à votre projet pour que tout fonctionne.
code pour générer un PDF à télécharger ici:
[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;
}
Résumé Après avoir examiné un certain nombre de solutions PDF pour C# MVC, j'utilise PdfSharp/MigraDoc. J'ai déduit iTextSharp et les projets basés dessus à cause des coûts de licence élevés si vous l'utilisez commercialement (2500 € dans mon cas). Report.NET a été développé avec ASP.NET classic et n'a pas reçu de mise à jour depuis 2006.
dupliquer: http://stackoverflow.com/questions/779430/asp-net-mvc-how-to-get -view-to-generate-pdf –
Je ne souhaite pas générer le fichier PDF sur une vue, ce n'est donc pas la même question. – hminaya
@hminaya: alors c'est une copie de http://stackoverflow.com/questions/1244109/generating-pdf-file-in-net –