2013-07-06 65 views
2

我們有一個用Scala/Liftweb編寫的web應用程序,運行良好。現在我們需要將一些視圖/報告呈現爲PDF文件。我們已經使用了格式良好的XHTML並將其輸出爲PDF格式的庫,因此我試圖將渲染的Lift模板的輸出作爲字符串提供給我們的PDF庫。電梯 - 在字符串變量中獲取模板的呈現輸出

如何獲取模板的輸出作爲變量?我已經看到this discussion David Pollak談論使用返回NodeSeq的S.render,但我們在這方面沒有取得太多進展。

理想我會做一些事情,如:

val seq = S.render(NodeSeq, ???) 
val stringOutput = seq.toString()  

回答

2

如果你做這樣的事情,它應該渲染頁面:

val htmlString:Box[String] = for{ 
    r <- S.request 
    t <- Templates("index" :: Nil) 
} yield S.render(t, r.request)) 

index應該由模板的路徑來替代你想渲染。這應該適用於基本實例,但是如果使用Menu.params或其他URL類型變量,則需要一些額外的工作。

更新:

如果您需要訪問HTTP請求的線程之外會話對象,您將需要初始化會話。要做到這一點,你可以修改上面,像這樣:

val html = for{ 
    r <- S.request 
    sn <- S.session 
    t <- Templates("index" :: Nil) 
} yield S.initIfUninitted(sn) { 
    S.render(t, r.request)) 
} 
+0

是的,這應該工作,但是'htmlString'返回類型將是'盒[NodeSeq]' - 你至少要做' S.render(t,r.request).toString'。 – Rogach

+0

這太好了。我現在就去試試看。 – davidethell

+0

好東西!這很好。 – davidethell