我们有一个用Scala / Liftweb编写的Web应用程序运行良好。现在我们需要将一些视图/报告呈现为PDF文件。我们已经使用了将采用格式良好的XHTML并将其输出为PDF的库,因此我试图将渲染的Lift模板的输出作为字符串输出到PDF库中。
如何将模板的输出作为变量?我见过this discussion David Pollak谈到使用返回NodeSeq的S.render,但我们在这方面没有取得多大进展。
理想情况下,我会做类似的事情:
val seq = S.render(NodeSeq, ???)
val stringOutput = seq.toString()
答案 0 :(得分: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))
}