使用pdf模块在play框架中生成pdf报告

时间:2011-10-28 13:23:04

标签: java pdf playframework report

我在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>

1 个答案:

答案 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。