我正在使用 ExpertPDF 的 Html-to-PDF 转换实用程序来解决这个问题(尽管如果有足够的文档,我也愿意接受其他库)。
简而言之,我有一个以特定方式格式化的视图,我想将其呈现为用户可以保存到磁盘的 PDF 文档。
到目前为止,我拥有的是一个 PrintService(它实现了一个 IPrintService 接口),这个实现有两个 PrintToPDF() 重载,一个只接受 URL,另一个接受 HTML 字符串,两者都返回一个 byte[]。我只计算出了需要 HTML 字符串的第二个重载的详细信息。
我想从我的控制器中执行的操作如下:
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”。有没有一种快速的方法来获取视图的字符串表示形式?或者也许我应该坚持使用 URL 重载并将 URL 传递给视图...还有其他想法吗?
Thanks!
我将我的解决方案打包在 Nuget 包中:Rotativahttp://nuget.org/packages/Rotativa http://nuget.org/packages/Rotativa。它基于 wkhtmltopdf。
使用方法非常简单。
您希望将某个操作作为 Pdf,而不是 Html 页面。您可以定义一个返回 ActionAsPdf 类型的 ActionResult 的操作(RouteAsPdf 也可用)。
所以代码就是:
public ActionResult PrintIndex()
{
return new ActionAsPdf("Index", new { name = "Giorgio" }) { FileName = "Test.pdf" };
}
name =“Giorgio”作为路由参数。
即使打印操作受到 Web 表单身份验证([Authorize] 属性)的保护,它仍然有效
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)