Сохранение JasperReports-отчёта на сервере в pdf

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
DimOn (Обсуждение | вклад)
(Новая страница: «Пример динамического action, перегружающего стандартный ActionReport. Показывает как можно отренд…»)
Следующая правка →

Версия 07:21, 15 сентября 2014

Пример динамического 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
      // начать бизнес процесс в вебскрипте, повешенном на приемнике. 
    }
  }
}

в конфиге:

Указан неподдерживаемый язык.

Вы должны указать язык следующим образом: <source lang="html">...</source>

Поддерживаемые языки:

abap, actionscript, ada, apache, applescript, asm, asp, autoit, bash, basic4gl, blitzbasic, bnf, c, c_mac, caddcl, cadlisp, cfdg, cfm, cpp, cpp-qt, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gml, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, latex, lisp, lua, m68k, matlab, mirc, mpasm, mysql, nsis, objc, ocaml, ocaml-brief, oobas, oracle8, pascal, per, perl, php, php-brief, plsql, python, qbasic, rails, reg, robots, ruby, sas, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, vhdl, visualfoxpro, winbatch, xml, xpp, z80

Личные инструменты