74 votes

Asp.Net MVC : comment faire en sorte que la vue génère un PDF ?

Je voudrais appeler une action sur un contrôleur. Faire en sorte que le contrôleur obtienne les données du modèle. La vue s'exécute ensuite et génère un PDF. Le seul exemple que j'ai trouvé se trouve dans un article de Lou. http://whereslou.com/2009/04/12/returning-pdfs-from-an-aspnet-mvc-action . Son code est très élégant. La vue utilise ITextSharp pour générer le PDF. Le seul inconvénient est que son exemple utilise le moteur de visualisation Spark. Existe-t-il un moyen de faire quelque chose de similaire avec le moteur de vue standard de Microsoft ?

8 votes

L'utilisation du moteur de visualisation Spark présente-t-elle un inconvénient ? Je suis blessé :)

0 votes

J'ai eu du mal avec cela. Spark avec iText était facile à utiliser, mais le formatage des PDF était limité. J'aimerais beaucoup voir votre exemple où vous utilisez un modèle de fichier PDF, modifiez le contenu et écrivez ensuite dans un flux.

0 votes

83voto

David Points 7618

J'utilise iTextSharp pour générer des PDF dynamiques en MVC. Tout ce que vous avez à faire est de placer votre PDF dans un objet Stream et de retourner un FileStreamResult dans votre ActionResult. J'ai également défini la disposition du contenu pour que l'utilisateur puisse le télécharger.

public FileStreamResult PDFGenerator()
{
    Stream fileStream = GeneratePDF();

    HttpContext.Response.AddHeader("content-disposition", 
    "attachment; filename=form.pdf");

    return new FileStreamResult(fileStream, "application/pdf");
}

Je dispose également d'un code qui me permet de prendre un modèle de PDF, d'y écrire du texte et des images, etc.

  • Remarque : vous devez régler la position du flux sur 0.

    private Stream GeneratePDF() { //create your pdf and put it into the stream... pdf variable below //comes from a class I use to write content to PDF files

    MemoryStream ms = new MemoryStream();
    
    byte\[\] byteInfo = pdf.Output();
    ms.Write(byteInfo, 0, byteInfo.Length);
    ms.Position = 0;
    
    return ms;

    }

5 votes

J'aimerais bien voir à quoi ressemble cette "classe pdf" dans l'exemple ou obtenir des conseils sur la façon de la mettre en œuvre ?

1 votes

La seule chose que je voudrais ajouter à cela est que cette action ne peut pas être appelée à partir d'un postback partiel (ajax) mais plutôt utiliser un Html.ActionLink ou similaire.

2 votes

Article sur le projet de code avec un exemple de code : codeproject.com/Articles/66948/

6voto

Jan Blaha Points 115

Créer une mise en page en html et imprimer ensuite en pdf est le moyen le plus rapide.

La conversion de Html en pdf est assurée par phantomjs , wkhtmltopdf o jsreport

jsreport permet une intégration directe avec les vues asp.net mvc, où vous pouvez simplement marquer l'action du contrôleur avec un attribut et il imprimera le pdf au lieu du html pour vous.

Plus d'informations à ce sujet article de blog

Disclaimer : Je suis l'auteur de jsreport

1 votes

Si vous utilisez MVC, Rotativa est un très bon wrapper pour wkhtmltopdf... super facile à utiliser, nous l'avons converti pour résoudre ce problème maintenant... Il y avait un problème avec les images, mais il y a une solution de contournement sur SO

0 votes

Oui, Rorativa est un bel emballage. jsreport est plutôt un serveur de rapports qui gère les images ou conserve l'historique des rapports pour vous.

5voto

Sean Dong Points 85

Je suis aussi tombé sur ceci http://www.codeproject.com/Articles/260470/PDF-reporting-using-ASP-NET-MVC3 . C'est facile et rapide, et s'intègre bien à MVC.

Cependant, le seul inconvénient jusqu'à présent est qu'il n'est pas tout à fait flexible si vous voulez avoir une mise en page décente, par exemple, vous n'avez pas beaucoup de contrôle sur la table, et les frontières des cellules par le biais du html. Il permet de forcer l'ouverture d'une nouvelle page, mais vous devrez appliquer un patch à iTextsharp.

2voto

user275308 Points 21

J'ai eu du mal avec cela. Spark avec iText était facile à utiliser, mais le formatage des PDF était limité. J'aimerais beaucoup voir votre exemple où vous utilisez un modèle de fichier PDF, modifiez le contenu et écrivez ensuite dans un flux.

2voto

NicoJuicy Points 892

J'ai juste utilisé wkhtmltopdf, pour créer la mise en page en html et ensuite, je l'ai converti en pdf.

Facile, personnalisable, génial comme l'enfer :)

2 votes

Je suppose que vous voulez dire wkhtmltopdf

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X