19/09/2024

AppDatos

Portal de Información – Rutificador

[Java] Retornar un PDF Stream en un Java Servlet

2 minutos de lectura

Generando a un JasperPrint necesario para lograr un JasperExportManager.


import com.google.gson.Gson;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class ReportDataFactoryDEL {

  public static JasperPrint loadReport(String json) throws JRException {
    List<Map<String,Object>> result = null;

    result =  new Gson().fromJson(json, List.class);
    final String reportSource = "C:/jasper/report.jasper";

    // Definimos cual sera nuestra fuente de datos
    JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(result);

    // Rellenamos el informe con la conexion creada y sus parametros establecidos
    Map<String,Object> reportParameters = new HashMap<String, Object>();
    reportParameters.put("ofertas",ds);
    JasperPrint print = JasperFillManager.fillReport(reportSource,reportParameters, new JREmptyDataSource());

    return print;
  }

}



Llamamos a la función que contiene el JasperPrint para enviarla al Cliente mediante un Response



import com.bice.precam.del.ReportDataFactoryDEL;

import net.sf.jasperreports.engine.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
  
public class ReportOfertasService {
  
  public void doPut(HttpServletRequest req, HttpServletResponse res) {

      ReportDataFactoryDEL rf = new ReportDataFactoryDEL();

        JasperPrint jasperPrint = new JasperPrint();
		//Directorio donde se guardará una copia fisica
        final String reportPdf = "C:/jasper/PREOFERTAS1.pdf";

		//Definimos el tipo datos
        jasperPrint = rf.loadReportOfertas(dtRequestDTO, codCampana);
        res.setContentType("application/pdf");
        res.setHeader("Content-Disposition", "inline; filename=report.pdf");

		//Guardamos en el directorio
        JasperExportManager.exportReportToPdfFile(jasperPrint, reportPdf);
		//Enviamos el Stream al Cliente
        JasperExportManager.exportReportToPdfStream(jasperPrint, res.getOutputStream());
		
  }
  
}

Desde el Cliente enviamos los parámetros y el json de entrada, luego capturamos el PDF Stream y lo transformamos en un Archivo PDF. * Requiere Jquery.




$(document).ready(function() {

var req = new XMLHttpRequest();
req.open("PUT", "http://localhost:7001/PRECAM/PreServicesHub?_idr=REPORT_OFERTA&codCampana=472", true);
req.responseType = "blob";
req.onreadystatechange = function () {
    if (req.readyState === 4 && req.status === 200) {
        var filename = "PdfName-" + new Date().getTime() + ".pdf";
        if (typeof window.chrome !== 'undefined') {
            // Chrome version
            var link = document.createElement('a');
            link.href = window.URL.createObjectURL(req.response);
            link.download = "PdfName-" + new Date().getTime() + ".pdf";
            link.click();
        } else if (typeof window.navigator.msSaveBlob !== 'undefined') {
            // IE version
            var blob = new Blob([req.response], { type: 'application/pdf' });
            window.navigator.msSaveBlob(blob, filename);
        } else {
            // Firefox version
            var file = new File([req.response], filename, { type: 'application/force-download' });
            window.open(URL.createObjectURL(file));
        }
    }
};
req.send(JSON.stringify({"page":"1","pageLength":"10","columnOrderer":"NUM_IDEN","orderType":"1","filters":[{"dataType":"NUM","columnName":"COD_REGION","filterType":"2","botNumericRange":1,"topNumericRange":13}]}));


});

Deja una respuesta