我在playframework
app.I安装了pdf 0.7
模块时遇到了关于报告生成(pdf)的问题。
我需要向用户显示Product
的列表,它们的价格以及网页中销售的总金额。如果用户希望这样,他应该能够生成相同的pdf报告。我想在网页上为用户提供一个链接,点击该链接,打开包含格式化数据的pdf文档。用户可以将其保存在任何所需的位置。
我向模板发送了一个名为“产品实例”及其数量的HashMap
。通过此信息,我可以计算单个价格,总价格等,并以表格形式呈现。
现在,这必须放在pdf中。为此我调用一个控制器方法(比如createReport(...)
)并传递相同的HashMap
。在控制器方法中,我必须以某种方式格式化信息使用renderPDF()
进行渲染。
所以,我来回发送HashMap,我想知道这是否正确..
请告知。
Crtlr.java代码段:
public static void showListings(){
HashMap<Product,Integer> map = createProductQtyMap();
render(map);
}
showListings模板片段:
<table>
#{list items:map.keySet() , as:'product'}
<tr>
<td>${product.getName()} </td>
<td>${map.get(product)} </td>
<td>${product.price} </td>
<td>${product.price * map.get(product)} </td>
</tr>
#{/list}
</table>
...
<a href="@{Ctrlr.createReport(map)}">create report</a>
Ctrlr.java
public static void createReport(HashMap<Product,Integer> map){
StringBuffer html=new StringBuffer("<html><body>");
//iterate thru map and create table rows as done in template
html.append("</body></html>");
String title= "my report";
play.modules.pdf.PDF.renderPDF(html.toString(),title);
}
在createReport模板中
...
<div id="report">
${html.raw()}
</div>
答案 0 :(得分:1)
除非我误解了您的要求,否则这不是正确的做法。我相信你应该做到以下几点。
public static void createReport() {
String title = "my report";
HashMap<Product,Integer> map = createProductQtyMap();
play.modules.pdf.PDF.renderPDF(map,title);
}
并且在createReport模板中,您只需像任何其他HTML视图一样进行渲染,因此您可以在很大程度上复制并粘贴showListings中的代码。如果您只想重复使用相同的视图,那么请确保您创建链接,图像,css等绝对路径,并确保仅从SCREEN设置CSS。