Ich möchte eine Aktion auf einem Controller aufrufen. Lassen Sie den Controller die Daten vom Modell abrufen. Die Ansicht wird ausgeführt und generiert eine PDF-Datei. Das einzige Beispiel, das ich gefunden habe, ist in einem Artikel von Lou http://whereslou.com/2009/04/12/returning-pdfs-from-an-aspnet-mvc-action. Sein Code ist sehr elegant. Die Ansicht verwendet ITextSharp zum Generieren der PDF. Der einzige Nachteil ist, dass sein Beispiel die Spark View Engine verwendet. Gibt es eine Möglichkeit, eine ähnliche Sache mit der Standard-Microsoft-View-Engine zu machen?Asp.Net MVC, wie zu sehen, um PDF zu generieren
Antwort
Unsere endgültige Antwort auf dieses Problem war, Rotativa zu verwenden.
Es wickelt die WKhtmltopdf.exe wie einige der anderen Lösungen, aber es ist bei weitem die am einfachsten zu bedienen, dass ich
ging ich gefunden habe und bis stimmten alle anderen Antworten, die auch gut, das Problem lösen, aber das haben wir benutzt, um das in der obigen Frage gestellte Problem zu lösen. Es ist anders als die anderen Antworten.
Hier ist ein Rotativa Tutorial.
, nachdem Sie es installiert haben, das ist alles, um Ihren Bedarf
public ActionResult PrintInvoice(int invoiceId)
{
return new ActionAsPdf(
"Invoice",
new { invoiceId= invoiceId })
{ FileName = "Invoice.pdf" };
}
Sehr sehr einfach.
Warum der Downvote, ich bin verwirrt. So lösen wir das Problem jetzt, also habe ich die Frage aktualisiert, um sie aktuell zu halten. Ich verstehe nicht. Wie kann ich es besser machen, wenn ich nicht verstehe, warum ich die Stimmen bekommen habe? –
Wieder eine Abstimmung ohne Kommentar ... das ist die Antwort, mit der wir das Problem gelöst haben. Ich habe mir extra Mühe gegeben, zurückzukommen und die Frage mit der aktuelleren Antwort zu aktualisieren. Ich bin verwirrt, wie das eine Down-Vote bewertet, es sei denn, du magst Rotativa einfach nicht. –
Brown Schöne Antwort mit absolut keinem Code, das brauchen wir im 21. Jahrhundert. +1 für beide Kommentare und Antwort..thanks haufen – Learner
Ich benutze iTextSharp, um dynamische PDFs in MVC zu generieren. Alles, was Sie tun müssen, ist, Ihre PDF-Datei in ein Stream-Objekt einzufügen und dann Ihr ActionResult ein FileStreamResult zurückzugeben. Ich stelle auch die Inhaltsdisposition so ein, dass der Benutzer sie herunterladen kann.
public FileStreamResult PDFGenerator() { Stream fileStream = GeneratePDF(); HttpContext.Response.AddHeader("content-disposition", "attachment; filename=form.pdf"); return new FileStreamResult(fileStream, "application/pdf"); }
Ich habe Code auch, die mir eine Vorlage PDF nehmen können, schreiben Sie Text und Bilder, um es usw. (wenn Sie das tun wollte).
- Hinweis: Sie müssen die Stream-Position setzen 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; }
netten Code verpackt. Ich habe mich gefragt, wie wir das machen könnten. – MikeJ
Genau das, was ich gesucht habe –
Ich würde gerne sehen, Beispiel, wie diese "pdf-Klasse" in dem Beispiel aussieht oder einige Hinweise, wie es zu implementieren? – jesperlind
ich auf diese http://www.codeproject.com/Articles/260470/PDF-reporting-using-ASP-NET-MVC3 auch kam. Es ist einfach und schnell und passt gut zu MVC.
Allerdings ist der einzige Nachteil bisher, dass es nicht sehr flexibel ist, Sie wollen ein anständiges Layout haben, zum Beispiel haben Sie nicht viel Kontrolle mit Tabelle und Zelle Grenzen durch HTML. Es unterstützt eine neue Seite, aber Sie müssen einen Patch auf iTextsharp anwenden.
Danke, das hat für mich funktioniert! –
Ich habe gerade wkhtmltopdf verwendet, um das Layout in HTML zu erstellen und anschließend wandle ich es in pdf um.
Einfache, kundengerecht, fantastisch, wie die Hölle :)
Ich nehme an, du meinst wkhtmltopdf – raider33
Erstellen von Layouts in HTML und Druck danach in pdf ist der schnellste Weg.
Html in PDF-Konvertierung wird durch phantomjs, wkhtmltopdf oder jsreport bereitgestellt
jsreport direkte Integration mit asp.net MVC Ansichten bietet, wo können Sie einfach markieren Controller-Aktion mit dem Attribut und es wird pdf statt html drucken für Sie.
Mehr zu diesen blog post
Disclaimer: Ich bin der Autor der jsreport
Wenn du MVC verwendest, ist Rotativa ein wirklich netter Wrapper für wkhtmltopdf ... super einfach zu bedienen, wir haben es konvertiert, um dieses Problem jetzt zu lösen ... Es gab ein Problem mit Bildern, aber es gibt einen Workaround auf SO –
Ja, Rorativa ist ein nettes Wrapper. jsreport ist eher ein Berichtsserver, der Bilder verarbeitet oder den Protokollverlauf für Sie speichert. –
Dies ist eine alte Frage, aber eine, die immer noch relevant ist, und ich dachte, ich würde nur teilen, was ich realisiert habe, was gut funktioniert .
NuGet Paket TuesPechkin installieren - eine Gabel in der Pechkin Bibliothek auf wkhtmltopdf basiert, die ein Webkit-Engine verwendet HTML-Seiten in PDF zu konvertieren.
Schreiben Sie einen kleinen Helfer, um eine Ansicht zu lesen und in eine HTML-Zeichenfolge zu konvertieren (mvcContext is this.HttpContext). Der Ersatz ist natürlich optional!:
public static string RenderViewToString(HttpContextBase mvcContext, string area, string controllerName, string viewName, object model) { var context = System.Web.HttpContext.Current; var contextBase = mvcContext; var routeData = new RouteData(); if (area == null) area = ""; routeData.DataTokens.Add("area", area); routeData.Values.Add("controller", controllerName); var controllerContext = new ControllerContext(contextBase, routeData, new EmptyController()); var razorViewEngine = new RazorViewEngine(); var razorViewResult = razorViewEngine.FindView(controllerContext, viewName, "", false); var writer = new StringWriter(); var viewContext = new ViewContext(controllerContext, razorViewResult.View, new ViewDataDictionary(model), new TempDataDictionary(), writer); razorViewResult.View.Render(viewContext, writer); string hostAddress = context.Request.Url.Scheme + "://" + context.Request.Url.Authority; return writer.ToString() .Replace("src=\"/", "src=\"" + hostAddress + "/") .Replace("<link href=\"/", "<link href=\"" + hostAddress + "/"); } class EmptyController : ControllerBase { protected override void ExecuteCore() { } }
Die harte Arbeit der von hier oben waren: http://wouterdekort.blogspot.co.uk/2012/10/rendering-aspnet-mvc-view-to-string-in.html?showComment=1414603363455#c7863520150405064571
eine MVC-Aktion erstellen das Dokument
public ActionResult DownloadPDF(long CentreID) { var model = GetModel() IPechkin converter = Factory.Create(); byte[] result = converter.Convert(Helpers.PDF.RenderViewToString(this.HttpContext, "area", "controller", "action", model); MemoryStream outputStream = new MemoryStream(); outputStream.Write(result, 0, result.Length); outputStream.Position = 0; return File(outputStream, "application/pdf", "filename.pdf"); }
zu erzeugen
Für diejenigen, die diesem Tutorial folgen und Fehler bei 'IPechkin'- und' Factory'-Dingen haben, liegt es daran, dass es bereits veraltet ist. Bitte lesen Sie, wie Sie den Repo unter https://github.com/tuespetre/TuesPechkin installieren und implementieren. – chaintng
Und auch, nachdem Sie 'DienstagPechkin' von nugget herunterladen, vergessen Sie nicht,' DienstagPechkin.Wkhtmltox.Win32' oder 'DienstagPechkin.Wkhtmltox.Win64' zu downloaden, da es nicht beim Download enthalten ist. – chaintng
Dies sollte eine der besten Antworten sein. War genau das, was ich suchte und es ist Open Source. – Alao
Sehr späte Antwort, aber ich fand, dass die folgende URL hat mir geholfen, meine Ergebnisse schnell zu erhalten:
(Stellen Sie sicher, dass Sie durch die Nutzung der Nuget Pakete zum iTextSharp DLL Referenz)
EDIT Dies ist der Code, den ich die Tabelle ein wenig anders aussehen verwendet (Dies ist Landschaft auch:
public string GetCssForPdf()
{
string css = "";
css = "th, td" +
"{" +
"font-family:Arial; font-size:10px" +
"}";
return css;
}
[HttpPost]
[ValidateInput(false)]
public FileResult Export(string GridHtml)
{
string webgridstyle = GetCssForPdf();
string exportData = String.Format("<html><body>{0}{1}</body></html>", "<style>" + webgridstyle + "</style>", GridHtml);
var bytes = System.Text.Encoding.UTF8.GetBytes(exportData);
using (var input = new MemoryStream(bytes))
{
var output = new MemoryStream();
var document = new iTextSharp.text.Document(PageSize.A4, 50, 50, 50, 50);
var writer = PdfWriter.GetInstance(document, output);
document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
Font headerFont = FontFactory.GetFont("Verdana", 10);
Font rowfont = FontFactory.GetFont("Verdana", 10);
writer.CloseStream = false;
document.Open();
var xmlWorker = iTextSharp.tool.xml.XMLWorkerHelper.GetInstance();
xmlWorker.ParseXHtml(writer, document, input, System.Text.Encoding.UTF8);
document.Close();
output.Position = 0;
return File(output, "application/pdf", "Pipeline_Report.pdf");
//return new FileStreamResult(output, "application/pdf");
}
}
Hoffe, das hilft auch jemand anderen.
- 1. Generieren Sie PDF-Dateien von asp.net mvc
- 2. Wie FPDF zu verwenden, um fpdf zu generieren (einzelne Datei)
- 3. Subwebsite in mvc asp.net generieren
- 4. ASP.NET MVC Umleiten zu PDF, aber 404 auf Entwicklungsserver
- 5. Generieren von PDF-Dokumente in ASP.NET
- 6. ASP.NET MVC - Ist es möglich, anwendungsübergreifende Aktionslinks zu generieren?
- 7. Alternative zu pdf mit asp.net zu verwenden
- 8. Designer, um Einbauten zu sehen?
- 9. Warum hat Microsoft MVC gewählt, um ASP.net MVC zu erstellen?
- 10. dxf zu pdf in asp.net
- 11. Keine anderen Tabellen nach dem PDF-Größenlimit zu sehen
- 12. Asp.net MVC Bindung zu Modell
- 13. Funktion ASP.NET verwendet, um Session ID zu generieren?
- 14. Wie zeige ich eine PDF mit PdfSharp in ASP.Net MVC?
- 15. Exportieren einer PDF-Datei mit ASP.NET MVC
- 16. Wie in PDF-Dateien zu suchen
- 17. Wie Asp.net Mvc-Controller zu nennen?
- 18. asp.net mvc Wie Controller richtig zu testen
- 19. programmatisch generieren einen Link in asp.net-mvc
- 20. In asp.net gibt es sowieso was in httpcontext.Cache zu sehen?
- 21. Android: Jede schnellere Möglichkeit, PDF in Bilder zu generieren und auf das PDF zu zeichnen.
- 22. Asp.NET MVC AjaxOptions OnSuccess feuert .. zu früh?
- 23. Generieren von RSS mit ASP.Net MVC?
- 24. ASP.NET MVC - Wie es zu erklären?
- 25. matplotlib - Auflösung erhöhen, um Details zu sehen
- 26. ASP.NET MVC - ActionFilterAttribute, um POST-Daten zu validieren
- 27. ASP.Net MVC anpassen Attribut, um den gleichen Code zu ersetzen
- 28. -Test, um zu sehen, ob ein XElement
- 29. derzeit keine Orte, um zu sehen: [CLLocation]
- 30. Verwenden Scala-Makros, um Methoden zu generieren
Die Verwendung der Spark-View-Engine ist ein Nachteil? Ich bin verwundet. :) – loudej
Überprüfen Sie dies, RazorPDF: http://www.nyveldt.com/blog/post/Introducing-RazorPDF –
Eine detaillierte Beschreibung, wie es in ASP.NET MVC mit PhantomJS ist hier protokolliert: http: // zizhujy.com/blog/post/2014/07/29/Use-PhantomJS-To-Create-WebPage-to-PDF-Converter.aspx. Und ein Online-Beispiel angewendet die Schritte des Blog-Post ist hier: http://zizhujy.com/en-US/PDFConverter. Dies funktioniert sehr gut, solange die Seite anonymen Besuch erlaubt. –