我正在使用 ExpertPDF 的 Html-to-PDF 转换实用程序来解决这个问题(尽管如果有足够的文档,我愿意使用其他库)。
简而言之,我有一个以特定方式格式化的 View ,我想将其呈现为用户可以保存到磁盘的 PDF 文档。
到目前为止,我有一个 PrintService(它实现了一个 IPrintService 接口(interface)),这个实现有两个 PrintToPDF() 重载,一个只接受一个 URL,另一个接受一个 HTML 字符串,两者都返回一个字节[].我只计算出需要 HTML 字符串的第二个重载的细节。
我想通过我的 Controller 做的事情是这样的:
public FileStreamResult Print(int id)
{
var model = _CustomRepository.Get(id);
string renderedView = SomethingThatRendersMyViewAsAString(model);
Stream byteStream = _PrintService.PrintToPdf(renderedView);
HttpContext.Response.AddHeader("content-disposition",
"attachment; filename=report.pdf");
return new FileStreamResult(byteStream, "application/pdf");
}
理论上会在页面上呈现 PDF。这是我正在寻求帮助的“SomethingThatRendersMyViewAsAString”。有没有一种快速获取 View 的字符串表示形式的方法?或者我应该坚持使用 URL 重载并将 URL 传递给 View ...还有其他想法吗?
谢谢!
最佳答案
我将我的解决方案打包在一个 Nuget 包中:Rotativa http://nuget.org/packages/Rotativa .它基于 wkhtmltopdf。
使用非常简单。
有一个 Action 你想作为 Pdf,而不是 Html 页面。您可以定义一个返回 ActionAsPdf 类型的 ActionResult 的操作(RouteAsPdf 也可用)。 所以代码只是:
public ActionResult PrintIndex()
{
return new ActionAsPdf("Index", new { name = "Giorgio" }) { FileName = "Test.pdf" };
}
将 name = "Giorgio"作为路由参数。
即使打印操作受到 Web 表单例份验证([Authorize] 属性)的保护,它也能正常工作
关于c# - 如何以 PDF 格式呈现 ASP.NET MVC View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1324597/