【问题标题】:Manipulate a MVC4 view's DOM and generate a CSS formatted PDF操作 MVC4 视图的 DOM 并生成 CSS 格式的 PDF
【发布时间】:2013-01-16 14:52:05
【问题描述】:

首先是当前状态:

  • 我有一个带有 razor 引擎的 MVC4 Web 应用程序(在线计算器)
  • 应用程序有一个显示计算结果的结果视图
  • 我可以使用 ABCPDF 8.1
  • 要操作 DOM,我使用 HtmlAgilityPack

目标是:在 ResultController 内部,获取当前视图 html,操作其 DOM(尤其是删除导航元素)并生成完全格式化的 pdf。

以下事情有效:

从 URL 创建一个完全 css 样式的 pdf

var document  = new Doc();
document.AddImageUrl("www.whatever.com");
return File(doc.GetData(), "application/pdf", "abc.pdf");

从带有操纵 DOM 的视图 html 创建一个 pdf,没有特定的 CSS3 格式

using (StringWriter sw = new StringWriter())
{

    // get html stream from view
    var result = ViewEngines.Engines.FindView(ControllerContext, "WizardFirstStep", "_Layout");
    var context = new ViewContext(ControllerContext, result.View, ViewData, TempData, sw);
    result.View.Render(context, sw);
    var html = sw.ToString();

    // manipulate DOM with HtmlAgilityPack
    var hdoc = new HtmlDocument();
    hdoc.LoadHtml(html);
    ... manipulation

    // create pdf and return FileContentResult
    var doc = new Doc();
    doc.AddImageHtml(hdoc.DocumentNode.InnerHtml);
    return File(doc.GetData(), "application/pdf", "abc.pdf");
}

所以我可以创建一个样式化的 html 站点作为 pdf,我可以创建一个操纵的非样式化的 html 文件作为 pdf。

AddImageUrl 使用 css

AddImageHtml 不使用 css

我会为每一种方法和解决方案感到高兴

//编辑:

我有一个快速解决这个问题的方法。而不是@Styles.Render css relative with

@Styles.Render("~/Content/css")

我绝对会解决样式表

@Styles.Render("http://localhost:53406/Content/Site.css")

但也许还有其他解决方案。

【问题讨论】:

  • 经过一番研究,我认为问题是:如何从包含 html 的字符串中渲染 mvc4 razor 中的视图(不显示视图)。

标签: c# asp.net asp.net-mvc-3 asp.net-mvc-4 abcpdf


【解决方案1】:

由于这是 MVC,一切都可以通过 URL 控制,我说将文档加载为 URL 而不是图像。

theDoc.AddImageUrl("http://www.google.com/")

这样 ABCpdf 会以您看到的方式加载页面。除非有脚本等控制视图,否则您需要为此配置文档。

【讨论】:

  • 没错。但我想操纵网站 DOM。我想从 HTML 页面生成结果 PDF,但没有与网站相关的内容,如版权、导航等。另一种方法是复制视图、自定义模板并从 URL 将该 HTML 打印为 pdf。但目前我没有找到一种方法来通过绝对 URL 访问视图而不在浏览器中显示它。我想我应该开始另一个与这个问题相关的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 2021-06-19
  • 1970-01-01
  • 2016-11-04
  • 2011-08-10
  • 1970-01-01
相关资源
最近更新 更多