C# 操纵MVC4视图';s DOM并生成CSS格式的PDF

C# 操纵MVC4视图';s DOM并生成CSS格式的PDF,c#,asp.net,asp.net-mvc-3,asp.net-mvc-4,abcpdf,C#,Asp.net,Asp.net Mvc 3,Asp.net Mvc 4,Abcpdf,首先,当前状态: 我有一个带有razor引擎的MVC4网络应用程序(在线计算器) 应用程序有一个resultview,其中显示计算结果 我有能力使用ABCPDF 8.1 要操作DOM,我使用HtmlAgilityPack 目标是:在ResultController中,获取当前视图html,操作其DOM(尤其是删除导航元素)并生成完全格式化的pdf 以下是有效的方法: 从URL创建完全css样式的pdf var document = new Doc(); document.AddImageU

首先,当前状态:

  • 我有一个带有razor引擎的MVC4网络应用程序(在线计算器)
  • 应用程序有一个resultview,其中显示计算结果
  • 我有能力使用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");
}
因此,我可以创建一个pdf格式的html站点,也可以创建一个pdf格式的非样式html文件

AddImageUrl使用css

AddImageHtml不使用css

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

//编辑:

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

@Styles.Render("~/Content/css")
我绝对是针对样式表的

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

但可能还有其他解决方案。

因为这是MVC,所有内容都可以通过URL控制,所以我建议将文档作为URL而不是图像加载

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

这样,ABCpdf将按照您看到的方式加载页面。除非存在控制视图的脚本和其他东西,否则您需要为此配置文档。

经过一些研究,我认为问题是:如何从包含html的字符串(不显示视图)在mvc4 razor中呈现视图。没错。但我想操纵网站DOM。我想从HTML页面生成一个结果PDF,但没有与网站相关的东西,如版权、导航等。另一种方法是复制视图、自定义模板并从URL将HTML打印为pdf。但目前,我没有找到一种方法,可以通过绝对URL访问视图,而不在浏览器中显示它。我想我应该开始另一个关于这个问题的问题。