gpt4 book ai didi

asp.net-mvc-3 - 将 PartialView Html 转换为 ITextSharp HtmlParser 的字符串

转载 作者:行者123 更新时间:2023-12-02 16:01:25 26 4
gpt4 key购买 nike

我有一个部分 View ,我正在尝试使用 ITextSharp 将 html 转换为 pdf。如何将 html 转换为字符串以便可以使用 ItextSharps HtmlParser?

我尝试过类似的事情但没有运气......有什么想法吗?:

 var contents = System.IO.File.ReadAllText(Url.Action("myPartial", "myController", new { id = 1 }, "http"));

最佳答案

我创建了一个特殊的 ViewResult 类,您可以将其作为操作的结果返回。

您可以在 bitbucket 上看到代码(查看 PdfFromHtmlResult 类)。

所以它的基本作用是:

  • 通过 Razor 引擎(或任何其他注册引擎)将 View 渲染为 Html
  • 将 html 提供给 iTextSharp
  • 将 pdf 作为 ViewResult 返回(具有正确的 mimetype 等)。

我的 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, 0, pdfBytes.Length);
}
}
}
}

使用正确的扩展方法(请参阅 BitBucket)等,我的 Controller 中的代码类似于:

 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(= session 信息)。

关于asp.net-mvc-3 - 将 PartialView Html 转换为 ITextSharp HtmlParser 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6953604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com