当前位置: 首页 > 编程语言 > C#

C#LearningTutorial-HowtoRenderASP.NETMVCViewsinPDF分享

时间:2023-04-10 15:47:50 C#

如何在PDF中渲染ASP.NETMVCViews文档,我会向其他图书馆开放)。简而言之,我有一个以特定方式格式化的视图,我想将其呈现为用户可以保存到磁盘的PDF文档。到目前为止,我有一个PrintService(它实现了一个IPrintService接口),这个实现有两个PrintToPDF()重载,一个只接受一个URL,另一个接受一个HTML字符串,都返回一个字节[]。我只统计了需要HTML字符串的第二次重载的细节。我想从我的控制器做的是:publicFileStreamResultPrint(intid){varmodel=_CustomRepository.Get(id);字符串renderedView=SomethingThatRendersMyViewAsAString(模型);流byteStream=_PrintService.PrintToPdf(renderedView);HttpContext.Response.AddHeader("content-disposition","attachment;filename=report.pdf");返回新的FileStreamResult(byteStream,"application/pdf");理论上这会将PDF渲染到页面。我正在寻求帮助的是“SomethingThatRendersMyViewAsAString”。有没有一种快速获取视图的字符串表示形式的方法?也许我应该坚持使用URL重新加载并将URL传递给视图……还有其他想法吗?谢谢!您可以在OnResultExecuting期间使用Response并将Filter属性替换为将结果HTML存储在MemoryStream中的内容。然后您可以在OnResultExecuted期间清除响应并将其替换为PDF转换的结果。我不确定这是否比从URL中获取HTML更好。publicFileStreamResultPrint(intid){varmodel=_CustomRepository.Get(id);这个.ConvertToPDF=true;返回视图(“HtmlView”);}publicoverrideOnResultExecuting(ResultExecutingContextcontext){if(this.ConvertToPDF){this.PDFStream=新内存流();context.HttpContext.Response.Filter=newPDFStreamFilter(this.PDFStream);}}publicoverrideOnResultExecuted(ResultExecutedContextcontext){if(this.ConvertToPDF){context.HttpContext.Response.Clear();this.PDFStream.Seek(0,SeekOrigin.Begin);流byteStream=_PrintService.PrintToPDF(this.PDFStream);StreamReaderreader=newStreamReader(byteStream);context.HttpContext.Response.AddHeader("content-disposition","attachment;filename=report.pdf");context.HttpContext.Response.AddHeader("content-type","application/pdf");context.HttpContext.Response.Write(reader.ReadToEnd());}}PDFStreamFilter需要覆盖“Write”方法并将数据发送到内存流。我将我的解决方案打包在一个Nuget包中:Rotativahttp://nuget.org/packages/Rotativa。它基于wkhtmltopdf。用法非常简单。有一个你想要作为Pdf的动作,而不是Html页面。您可以定义一个返回ActionAsPdf类型的ActionResult的操作(RouteAsPdf也可用)。所以代码只是:publicActionResultPrintIndex(){returnnewActionAsPdf("Index",new{name="Giorgio"}){FileName="Test.pdf"};}name="Giorgio"是路由参数。即使通过Web窗体身份验证([Authorize]属性)保护打印操作,它也能正常工作这听起来像我在使用视图作为电子邮件模板时遇到的类似问题。我找到的关于获取视图的字符串表示的最佳答案:将视图呈现为字符串我找到的最好的包是RazorPDF,在NuGet.org上作为iTextSharp提供。适用于Azure网站:https://nuget.org/packages/RazorPDF以上是C#学习教程:如何以PDF格式呈现ASP.NETMVC视图共享的全部内容,如果对大家有用,需要的话了解更多C#学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: