Сохранение 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
Личные инструменты