1

首先是当前状态:

  • 我有一个带有剃须刀引擎的 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")

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

4

1 回答 1

0

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

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

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

于 2013-01-18T21:19:40.607 回答