asp.net-mvc-3 – 将PartialView Html转换为ITextSharp HtmlPars
发布时间:2020-12-16 07:22:50 所属栏目:asp.Net 来源:网络整理
导读:我有一个局部视图,我正在尝试使用ITextSharp将html转换为pdf.如何将html转换为字符串,以便我可以使用ItextSharps HtmlParser? 我尝试过这样的事情没有运气……任何想法?: var contents = System.IO.File.ReadAllText(Url.Action("myPartial","myControlle
我有一个局部视图,我正在尝试使用ITextSharp将html转换为pdf.如何将html转换为字符串,以便我可以使用ItextSharps
HtmlParser?
我尝试过这样的事情没有运气……任何想法?: var contents = System.IO.File.ReadAllText(Url.Action("myPartial","myController",new { id = 1 },"http")); 解决方法
我创建了一个特殊的ViewResult类,您可以将其作为Action的结果返回.
您可以在bitbucket上看到代码(查看PdfFromHtmlResult类). 所以它基本上做的是: >通过Razor引擎(或任何其他注册引擎)将视图渲染为Html 我的ViewResult类看起来像: public class PdfFromHtmlResult : ViewResult { public override void ExecuteResult(ControllerContext context) { if (context == null) { throw new ArgumentNullException("context"); } if (string.IsNullOrEmpty(this.ViewName)) { this.ViewName = context.RouteData.GetRequiredString("action"); } if (this.View == null) { this.View = this.FindView(context).View; } // First get the html from the Html view using (var writer = new StringWriter()) { var vwContext = new ViewContext(context,this.View,this.ViewData,this.TempData,writer); this.View.Render(vwContext,writer); // Convert to pdf var response = context.HttpContext.Response; using (var pdfStream = new MemoryStream()) { var pdfDoc = new Document(); var pdfWriter = PdfWriter.GetInstance(pdfDoc,pdfStream); pdfDoc.Open(); using (var htmlRdr = new StringReader(writer.ToString())) { var parsed = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(htmlRdr,null); foreach (var parsedElement in parsed) { pdfDoc.Add(parsedElement); } } pdfDoc.Close(); response.ContentType = "application/pdf"; response.AddHeader("Content-Disposition",this.ViewName + ".pdf"); byte[] pdfBytes = pdfStream.ToArray(); response.OutputStream.Write(pdfBytes,pdfBytes.Length); } } } } 使用正确的扩展方法(参见BitBucket)等,我的控制器中的代码如下: public ActionResult MyPdf(int id) { var myModel = findDataWithID(id); // this assumes there is a MyPdf.cshtml/MyPdf.aspx as the view return this.PdfFromHtml(myModel); } 注意:您的方法不起作用,因为您将检索服务器上的Html,从而丢失存储在客户端上的所有cookie(=会话信息). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net 使用驻留在页面中的Cache缓存常用可定时更新的数据
- asp.net-mvc – 在ajax调用中ASP.NET MVC错误的url
- asp.net-mvc – ASP.Net Core中的动态路由
- asp.net-mvc – MVC 4 OAuth集成.接下来是什么以及如何从数
- 使用Azure表存储进行ASP.NET会话
- asp.net – 如何通过render事件禁用CalendarExtender控件中
- 使用离线功能构建ASP.Net Web应用程序
- 对于ASP.Net中的IIS管理哪个更好:WMI或ADSI或托管API?有什
- asp.net – Web Api 2:带内容的NotFound()?
- asp.net-mvc-3 – 使用JSON.Net序列化EF4.1实体
推荐文章
站长推荐
- asp.net-mvc – 要查看的ASP.NET MVC 2控制器:I
- asp.net – Datareader,DataAdapter,Dataset,Dat
- asp.net – Web.Config转换自定义配置部分
- asp.net-mvc – Chrome丢失了cookie
- asp.net – 是否有使用Markdown作为编辑器的WIKI
- asp.net – 如何使用Ajax.BeginForm OnSuccess和
- asp.net – 在Global.asax文件中创建Timer
- asp.net-mvc – 使用路由操作URL
- 为什么我的客户端去服务器来检查在使用ASP.NET M
- Asp.Net Mvc突出显示当前页面链接技术?
热点阅读