2

我们有一个用 Scala/Liftweb 编写的 Web 应用程序运行良好。现在我们需要将一些视图/报告呈现为 PDF 文件。我们已经使用了可以采用格式良好的 XHTML 并将其输出为 PDF 的库,因此我试图将渲染的 Lift 模板的输出作为字符串输入到我们的 PDF 库中。

如何将模板的输出作为变量获取?我看过这个讨论,David Pollak 谈到使用返回 NodeSeq 的 S.render,但我们在这方面没有取得太大进展。

理想情况下,我会做类似的事情:

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

1 回答 1

2

如果你做这样的事情,它应该呈现页面:

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

whereindex应该替换为要渲染的模板的路径。这应该适用于基本实例,但如果您使用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)) 
}
于 2013-07-06T13:13:19.417 回答