Сохранение JasperReports-отчёта на сервере в pdf
Материал из BiTel WiKi
Пример динамического 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