我想调用一个控制器上的操作。让控制器从模型中获取数据。该视图然后运行并生成PDF。我发现的唯一例子是Lou http://whereslou.com/2009/04/12/returning-pdfs-from-an-aspnet-mvc-action的一篇文章。他的代码非常优雅。该视图使用ITextSharp生成PDF。唯一的缺点是他的例子使用Spark View Engine。有没有办法用标准的Microsoft视图引擎做类似的事情?Asp.Net MVC如何让视图生成PDF
回答
我们对这个问题的最终答案是使用Rotativa。
它封装了WKhtmltopdf.exe像一些其他的解决方案,但它是迄今为止最容易使用,我发现
我就去了投票所有其他的答案也不能解决问题很好,但这是我们用来解决上述问题中提出的问题。这与其他答案不同。
安装后它,这都是你需要
public ActionResult PrintInvoice(int invoiceId)
{
return new ActionAsPdf(
"Invoice",
new { invoiceId= invoiceId })
{ FileName = "Invoice.pdf" };
}
非常非常简单。
我使用iTextSharp在MVC中生成动态PDF。您只需将PDF放入Stream对象中,然后您的ActionResult就会返回一个FileStreamResult。我还设置了内容处置,以便用户可以下载它。
public FileStreamResult PDFGenerator() { Stream fileStream = GeneratePDF(); HttpContext.Response.AddHeader("content-disposition", "attachment; filename=form.pdf"); return new FileStreamResult(fileStream, "application/pdf"); }
我也有代码,使我能够采取模板PDF,写文本和图像等(如果你想这样做)。
- 注意:您必须将流位置设置为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; }
不错的代码。我想知道我们如何能做到这一点。 – MikeJ 2009-04-22 22:22:10
正是我想找的 – 2009-07-13 09:29:48
我也碰到这个http://www.codeproject.com/Articles/260470/PDF-reporting-using-ASP-NET-MVC3来了。它非常简单快捷,并且与MVC非常吻合。
但是,到目前为止唯一的缺点是它不够灵活,你想有一个体面的布局,例如,你没有太多的控制表和单元格边界通过HTML。它支持强制新页面,但你将不得不应用补丁到iTextsharp。
我刚使用wkhtmltopdf,在html中创建布局,然后将其转换为pdf。
简单,可定制的,真棒的地狱:)
创建HTML和打印布局后成pdf是最快的方法。
HTML到PDF转换是通过phantomjs,wkhtmltopdf或jsreport
jsreport提供asp.net的MVC意见直接集成提供, 在那里你可以标记与属性控制器动作,它会打印PDF而不是HTML为您。
更多关于此blog post
免责声明:我jsreport
这是一个老问题的作家,而是一个仍然相关,我以为我只是分享我所实现的效果很好。
安装NuGet包TuesPechkin - 在Pechkin库叉基于WkHtmlToPdf一个使用Webkit引擎HTML页面转换为PDF。
编写一个小助手来读取视图并将其转换为HTML字符串(mvcContext是this.HttpContext)。替换当然是可选的!:
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() { } }
创建MVC行动生成文档
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"); }
非常晚回复,但我发现下面的网址帮我把我的结果很快:
(请确保您通过利用的NuGet包的参考iTextSharp的DLL)
编辑 这是我用来使表看起来有点不同的代码(这是景观,以及:
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");
}
}
希望这可以帮助别人。
- 1. ASP.NET MVC 2视图(ViewModel) - > MS Word或PDF生成?
- 2. 从asp.net生成PDF文件mvc
- 3. ASP.NET MVC如何生成JsonResults?
- 4. 如何从ASP.NET MVC视图生成XML文件?
- 5. ASP.NET MVC如何自动生成视图为“N一”关系
- 6. 如何在asp.net-mvc单元测试中生成视图?
- 7. 如何在ASP.NET中生成树视图?
- 8. 如何使用JQuery/ASP.Net从PDF文件生成缩略图图像MVC
- 9. 在ASP.NET MVC中的安全PDF视图
- 10. 如何在ASP.NET MVC视图
- 11. PDF生成性能ASP.NET
- 12. asp.net C#生成PDF文件
- 13. 如何控制ASP.NET MVC路由生成?
- 14. 如何在ASP.NET MVC中生成Div?
- 15. 如何为Asp.Net MVC生成文档?
- 16. ASP.NET MVC动态生成的图像URL
- 17. 生成原始json数组到视图在ASP.NET MVC
- 18. 有动态生成视图的asp.net mvc 2
- 19. 自动为ASP.NET MVC生成更好的视图
- 20. 关于生成ASP.NET MVC的问题“创建”视图
- 21. 生成完整的URL ASP.NET MVC剃刀视图
- 22. ASP.NET MVC在视图中生成子域URL
- 23. 在asp.net mvc视图上生成本地资源失败?
- 24. ASP.NET MVC Rotativa.ViewAsPdf生成移动视图(我想要全尺寸)
- 25. 改善生成的ASP.Net MVC表单视图的布局
- 26. ASP.NET MVC - 为控制器中的视图生成html
- 27. 如何从django视图生成报告文件(ODF,PDF)
- 28. 如何生成当前视图的PDF - ipad
- 29. 如何让ASP.NET MVC 3在自动生成的视图中呈现具有复杂类型的对象?
- 30. 如何访问ASP.NET MVC 3 T4模板中的视图生成器参数?
使用Spark视图引擎是一个缺点?我受伤了。 :) – loudej 2009-05-28 18:03:16
检查了这一点,RazorPDF:http://www.nyveldt.com/blog/post/Introducing-RazorPDF – 2013-05-20 09:10:09
关于如何在ASP.NET MVC与PhantomJS做到这一点的详细描述记录在这里:http:// zizhujy.com/blog/post/2014/07/29/Use-PhantomJS-To-Create-WebPage-to-PDF-Converter.aspx。在线示例应用博客文章的步骤在这里:http://zizhujy.com/en-US/PDFConverter。只要页面允许匿名访问,此功能就非常有用。 – 2014-10-29 09:56:59