создание отчета в формате pdf в playframework с использованием модуля pdf - PullRequest
0 голосов
/ 28 октября 2011

У меня проблема с генерацией отчета (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>

1 Ответ

1 голос
/ 28 октября 2011

Если я неправильно понял ваши требования, это неправильный подход.Я полагаю, что вы должны делать следующее:

public static void createReport() {
   String title = "my report";
   HashMap<Product,Integer> map = createProductQtyMap();
   play.modules.pdf.PDF.renderPDF(map,title);   
}

и в шаблоне createReport вы просто визуализируете, как при любом другом представлении HTML, так что вы можете в значительной степени копировать и вставлять свой код из showListings.Если вы хотите просто повторно использовать то же представление, убедитесь, что вы делаете ваши ссылки, изображения, CSS и т. Д. Абсолютными путями, а также убедитесь, что CSS не настроен только из SCREEN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...