まず第一に、現在の状態:
- かみそりエンジンを備えたMVC4Webアプリケーション(オンライン計算機)があります
- アプリケーションには、計算結果を表示する結果ビューがあります
- ABCPDF8.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");
特定のCSS3フォーマットなしで操作されたDOMを使用してビューhtmlからPDFを作成します
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の代わりにcss相対をレンダリングします
@Styles.Render("~/Content/css")
私は絶対にスタイルシートに取り組みます
@Styles.Render("http://localhost:53406/Content/Site.css")
しかし、おそらく他の解決策があります。