1

まず第一に、現在の状態:

  • かみそりエンジンを備えた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")

しかし、おそらく他の解決策があります。

4

1 に答える 1

0

これはMVCであり、すべてをURLで制御できるため、ドキュメントを画像ではなくURLとしてロードすると言います。

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

このようにして、ABCpdfはページを表示どおりにロードします。ビューを制御するスクリプトなどがない限り、そのためにドキュメントを構成する必要があります。

于 2013-01-18T21:19:40.607 に答える