asp.net-mvc – RazorPDF将pdf文件保存到MVC4中的服务器目录
发布时间:2020-12-16 07:00:49 所属栏目:asp.Net 来源:网络整理
导读:我目前正在使用MVC4中的RazorPDF组装和显示PDF,并希望在返回视图的同时将PDF文件保存到文件系统. 控制器操作中的以下代码行调用视图: return new PdfResult(claims,"PDF"); 解决方法 我最终通过更改RazorPDF渲染方法的代码库将pdf写入目录系统. Rendor方法
我目前正在使用MVC4中的RazorPDF组装和显示PDF,并希望在返回视图的同时将PDF文件保存到文件系统.
控制器操作中的以下代码行调用视图: return new PdfResult(claims,"PDF"); 解决方法
我最终通过更改RazorPDF渲染方法的代码库将pdf写入目录系统. Rendor方法创建与响应流关联的PdfWriter对象:
// Associate output with response stream var pdfWriter = PdfWriter.GetInstance(document,viewContext.HttpContext.Response.OutputStream); pdfWriter.CloseStream = false; 解决方案是创建另一个与FileStream对象关联的PdfWriter对象,如下所示: // Create the pdf file in the directory system var fileStream = new FileStream(myPdfFilePath,FileMode.Create); var pdfWriter2 = PdfWriter.GetInstance(document,fileStream); 然后我关闭了对象: fileStream.Close(); pdfWriter.Close(); pdfWriter2.Close(); 我必须基本上将RazorPDF的PdfResult和PdfView类合并到我自己的项目中并显着改变代码.原因是因为我还必须将调用发送到将pdf发送给用户的电子邮件类. 完整的渲染方法如下所示: public void Render(ViewContext viewContext,TextWriter writer) { // generate view into string var sb = new System.Text.StringBuilder(); TextWriter tw = new System.IO.StringWriter(sb); myResult.View.Render(viewContext,tw); var resultCache = sb.ToString(); // detect itext (or html) format of response XmlParser parser; using (var reader = GetXmlReader(resultCache)) { while (reader.Read() && reader.NodeType != XmlNodeType.Element) { // no-op } if (reader.NodeType == XmlNodeType.Element && reader.Name == "itext") parser = new XmlParser(); else parser = new HtmlParser(); } // Create a document processing context var document = new Document(); document.Open(); // Associate output with response stream var pdfWriter = PdfWriter.GetInstance(document,viewContext.HttpContext.Response.OutputStream); pdfWriter.CloseStream = false; // Create the pdf file in the directory system var fileStream = new FileStream(myPdfFilePath,fileStream); // this is as close as we can get to being "success" before writing output // so set the content type now viewContext.HttpContext.Response.ContentType = "application/pdf"; // parse memory through document into output using (var reader = GetXmlReader(resultCache)) { parser.Go(document,reader); } fileStream.Close(); // Send an email to the claimant Thread.Sleep(100); if (File.Exists(myPdfFilePath)) { var subject = "PDF Documents"; var body = Config.GetContent(ContentParams.CLAIM_DOCUMENT_EMAIL_BODY_TEXT); bool success; string errorMessage; Email.Send(myEmailAddress,subject,body,out success,out errorMessage,myPdfFilePath); } pdfWriter.Close(); pdfWriter2.Close(); } 如果这种能力以某种方式结合到当前的RazorPDF项目中,那将是很好的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – 在ASP.NET MVC3中的自定义授权属性中使用
- asp.net-mvc – DotNetOpenAuth在ASP.NET MVC中的OAuth
- asp.net – 如何自动执行功能/集成测试和数据库回滚
- asp.net – 可以将值或参数传递到用户控件?
- asp.net-mvc – 在存储库之间调用方法 – 存储库模式
- ASP.NET MVC的排队解决方案
- asp.net-mvc – EF 4.1 Code First:“非空值类型’DateTim
- ASP.NET MVC在IIS7下发布无法显示的解决办法
- asp.net – 在主页面加载中丢失了ViewState对象
- ASP.NET URL验证
推荐文章
站长推荐
热点阅读