Generar un solo archivo HTML con la API de Pentaho Reporting

Estimad@s,

este post es muy puntual, en los últimos días estuve lidiando con la API de Pentaho Reporting a raíz del desarrollo de node-prd y node-prd-web-example, la verdad que para cubrir las funciones básicas no tuve inconvenientes, pero me surgieron problemas al querer trabajar con salidas HTML.

Por defecto la salida que genera la llamada al método HtmlReportUtil.createDirectoryHTML(MasterReport report, String path) se compone de un archivo html por cada página que el reporte genere, eso no sería problema si estuviesen conectados entre sí, pero no lo están, por ende para mostrarlos es un problema, he visitado varios foros y he consultado un libro sobre el tema, pero nada. Por otro lado si lo generaba utilizando la opción del editor, lo generaba en un solo archivo y se veían perfecto las imágenes.

La solución vino de la mano del hecho que este software es open source, sencillamente descargué el código fuente y en la clase: org.pentaho.reporting.designer.core.actions.report.preview.PreviewHtmlAction está el código que utiliza el editor, al final quedó algo así:

ResourceManager manager = new ResourceManager(); manager.registerDefaults(); Resource res = manager.createDirectly(new URL("file:/home/mariano/reporte.prpt"), MasterReport.class);
MasterReport report = (MasterReport) res.getResource();

//Carpeta contenedora del archivo html, los estilos e imágenes
File tempDir = new File("/home/mariano/htmlTemp");
if(!tempDir.exist())
   tempDir.mkdirs();
//Nombre del archivo html. (recomiendo generarlo de forma aleatoria)
String fileName = "index.html";

//Se establece la carpeta en la cual se genera la salida HTML

final FileRepository targetRepository = new FileRepository(tempDir);
final ContentLocation targetRoot = targetRepository.getRoot();

//Se prepara el procesador del reporte, usando la implementación de HTML
final HtmlPrinter printer = new AllItemsHtmlPrinter(report.getResourceManager());
printer.setContentWriter(targetRoot, new DefaultNameGenerator(targetRoot, fileName));
printer.setDataWriter(targetRoot, 
                      new DefaultNameGenerator(targetRoot, "content"));
printer.setUrlRewriter(new FileSystemURLRewriter());

final StreamHtmlOutputProcessor outputProcessor = 
           new StreamHtmlOutputProcessor(report.getConfiguration());
outputProcessor.setPrinter(printer);
final StreamReportProcessor reportProcessor = 
           new StreamReportProcessor(report, outputProcessor);

//Se genera la salida HTML
reportProcessor.processReport();
reportProcessor.close();

 

Que bueno disponer del código fuente!

Saludos

Mariano

 

Buenas tardes

saludos

tengo un ETL que me genera un reporte en HTML y lo envía por mail a Outlook el problema está que HTML se está bien pero cuando llega en el contenido del correo se desplazan etiqueta por distinta razones una el tamaño de los logo y otra es el tamaño de las etiqueta.

 

 

En respuesta a por jose peña (no verificado)

Hola Jose

A mi me pasa algo parecido con HTMLs que envío a Outlook. No son reports de Pentaho, pero el resultado es el mismo. Outlook parece que ignora los tags de HTML que ajustan el tamaño de las imágenes y la composición queda muy mal.

Te sugiero que pruebes a hacer el mismo envío a un cliente web de email, como a Gmail, y si en web se te ven bien puede que te pase lo mismo que a mi con Outlook, y que sea un tema de seguridad o de configuración de Outlook.

Si es eso y encuentras cómo solucionarlo dímelo porque yo aún no he visto cómo hacerlo sin cambiar el código del HTML, o el tamaño original de las imágenes.

Saludos,