【发布时间】: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