Сохранение JasperReports-отчёта на сервере в pdf
Материал из BiTel WiKi
Версия от 07:22, 15 сентября 2014; DimOn (Обсуждение | вклад)
Пример динамического action, перегружающего стандартный ActionReport. Показывает как можно отрендерить в pdf результат выполнения JasperReports-отчёта. При выполнении отчёта (в данном примере - определённого) сохраняет результат отчёта в pdf файл на сервере. Дальше этот файл может передаваться в какую-то систему и т.п.
package ru.kristall.bgbilling.action; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.sql.SQLException; import ru.bitel.bgbilling.common.BGException; import ru.bitel.common.Utils; import ru.bitel.common.XMLUtils; import ru.bitel.bgbilling.kernel.event.Event; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; import bitel.billing.server.reports.BGCSVReport; import bitel.billing.server.reports.BGReport; import bitel.billing.server.ActionConType; import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Date; import java.io.FileOutputStream; import java.io.ByteArrayOutputStream; import java.io.ByteArrayInputStream; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.util.JRLoader; public class ActionReport extends bitel.billing.server.reports.action.ActionReport { @Override public void doAction() throws SQLException, BGException, IOException { super.doAction(); //kernel_erkc_kp String id = getParameter("report_id"); if (id.equalsIgnoreCase("kernel_erkc_kp")) { File o = new File("/tmp/report.stream.pdf"); FileOutputStream outFile = new FileOutputStream(o); BGReport report = null; try { log.debug( "Generate report with id=" + id ); report = getReport( id ); // запустили отчет заново } catch( Exception ex ) { ex.printStackTrace(); return; } if( report != null ) { try { ByteArrayOutputStream bOut = new ByteArrayOutputStream(); // выделим кусок памяти как выходной поток report.fillReportToStream(bOut); // получили результат отчета, заполненный xml ByteArrayInputStream bIn = new ByteArrayInputStream(bOut.toByteArray()); // входной поток из памяти JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(bIn); // заполним джасперовский принтер // JasperExportManager.exportReportToPdfFile(jasperPrint, "/tmp/report.pdf"); JasperExportManager.exportReportToPdfStream(jasperPrint, outFile); // выведем форматированный пдф в поток } catch( Exception ex ) { ex.printStackTrace(); } } // уложить полученный байтовый массив в base64 // получить идентификационный тикет // отправить на http://docum.local/alfresco/api/s/getFile // начать бизнес процесс в вебскрипте, повешенном на приемнике. } } }
в конфиге:
dynaction:reports.ActionReport=ru.kristall.bgbilling.action.ActionReport