У меня проблема с генерацией отчета (pdf) в приложении playframework
. Я установил модуль pdf 0.7
.
Мне нужно показать пользователю список Product
s, их цену и общую сумму от продаж на веб-странице. Если пользователь пожелает, он должен иметь возможность генерировать 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>