首先是当前状态:
- 我有一个带有剃须刀引擎的 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")
但也许还有其他解决方案。