2013-01-16 37 views
1

首先當前狀態:操縱MVC4視圖的DOM並生成CSS格式的PDF

  • 我有一個MVC4 web應用(在線計算器)用剃刀引擎
  • 應用程序有一個resultview這說明計算結果
  • 我不得不使用ABCPDF 8.1
  • 要操作DOM我使用HtmlAgilityPack的abbility

目標是:在ResultController中,獲取當前視圖html,操作其DOM(尤其是移除導航元素)並生成完全格式化的pdf。

以下幾點工作:

從URL

var document = new Doc(); 
document.AddImageUrl("www.whatever.com"); 
return File(doc.GetData(), "application/pdf", "abc.pdf"); 

創建一個完全的CSS樣式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.Render的CSS相對與

@Styles.Render("~/Content/css") 

我絕對地址樣式表

@Styles.Render("http://localhost:53406/Content/Site.css") 

但也許還有其他的解決方案。

+0

經過一番研究,我認爲問題是:如何從一個保存html的字符串(不顯示視圖)在mvc4剃鬚刀中渲染視圖。 – csteinmueller

回答

0

由於這是MVC,一切都可以通過URL控制,我說加載文檔作爲URL而不是圖像。

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

這種方式ABCpdf以您看到它的方式加載頁面。除非有腳本和控制視圖的東西,否則你需要爲此配置文檔。

+0

是的。但我想操縱網站的DOM。我想從HTML頁面生成結果PDF,但沒有版權,導航等網站相關的東西。另一種方法是複製視圖,自定義模板並將該HTML從HTML打印爲pdf。但目前我沒有找到通過absoulte URL訪問視圖而沒有在瀏覽器中顯示的方式。我想我應該開始有關這個問題的另一個問題。 – csteinmueller