2009-11-06 29 views
8

Me gustaría crear una página web dinámica de informes utilizando JSP. Básicamente debe contener las siguientes partes:JasperReports html y pdf output

  1. Filtro: El usuario puede especificar las condiciones del filtro y presionar un botón de filtro.
  2. HTML-output: El resultado del filtro se puede ver aquí. Es una página html grande (o varias si una página sería demasiado grande). Puede contener enlaces a otras partes del sistema.
  3. PDF-output: El usuario debe poder guardar una versión en PDF del informe para fines de impresión o archivo.

En lugar de implementar todo yo mismo, me gustaría utilizar una biblioteca de informes de Java, así que creé mi informe usando JasperReports. La salida en PDF es realmente agradable, pero la exportación html del informe no es adecuada para mis propósitos.

La exportación html de JasperReport crea un archivo html con muchos códigos integrados y opciones de configuración bastante aleatorias. Por ejemplo, crea una tabla con fondo blanco de forma predeterminada (<table style="... bgcolor="white" ... ">) que se puede desactivar utilizando la opción IS_WHITE_PAGE_BACKGROUND, por otro lado cellpadding="0" cellspacing="0" border="0" están cableados en la etiqueta table. También es extraño (y hace que el estilo css sea difícil) que en lugar de clases de tramo el archivo html contenga <span style="font-family: sansserif; color: #000000; font-size: 10.0px;"> para todos mis campos.

Por supuesto que puedo implementar la salida html usando JSP, pero significa que tengo que diseñar el resultado dos veces (una en jrxml para JasperReports, una en JSP) y tengo que volver a implementar las funciones de informe (como cálculo total, agrupación ...) que está en contra del principio DRY.

¿Cuál es la mejor práctica para implementar esto? ¿Es posible crear una mejor exportación HTML utilizando JasperReports?

Respuesta

12

No es fácil cambiar la salida HTML de JasperReports para que sea agradable. Aquí está una vieja cita de por qué:

... formatos de documentos tales como HTML o XLS, no son compatibles con el posicionamiento absoluto de el texto y elementos gráficos. El contenido de tales documentos se organiza en una estructura de tabla o cuadrícula. De supuesto, algunos pueden argumentar que absoluta posicionamiento de elementos en HTML es posible gracias a CSS, pero puede ser asegurarse de que la funcionalidad del estándar CSS está lejos de ser implementado en todos los navegadores, o que el mismo documento HTML no se verá el mismo en todas partes.

Esta es la razón por la JasperReports^incorporados en los exportadores que producen HTML, XLS o documentos CSV utilizan un algoritmo especial el fin de organizar las elementos presentes en una determinada página del documento en algún tipo de una rejilla. Cuando el informe diseños son muy complejos o aglomerada, que pasa de ser absoluta posicionamiento de rejilla o tabla de diseño produce tablas muy complejas con muchos filas y columnas no utilizadas, para que sea para el espacio vacío entre los elementos o su alineamiento especial .

source

Como se ha mencionado que es antiguo, pero por lo que yo puedo decir que todavía precisa.

La lista de cosas que puede controlar para el exportador HTML es muy limitado:

net.sf.jasperreports.export.html.frames.as.nested.tables 
net.sf.jasperreports.export.html.remove.emtpy.space.between.rows 
net.sf.jasperreports.export.html.size.unit 
net.sf.jasperreports.export.html.using.images.to.align 
net.sf.jasperreports.export.html.white.page.background 
net.sf.jasperreports.export.html.wrap.break.word 
net.sf.jasperreports.export.{format}.exclude.origin.{suffix}.{arbitrary_name} 
net.sf.jasperreports.export.{format}.exclude.origin.keep.first.{suffix}.{arbitrary_name} 

documentation here

que he estado lejos de HTML y sólo uso PDF, Excel y CSV menos que los clientes demanda HTML Si debe usar HTML, puede definir una hoja de estilo para trabajar con su sitio y usar jQuery para eliminar todos los estilos en línea para que su hoja de estilo se haga cargo. Algo como:

$(document).ready(function() { 
    $('span').removeAttr('style'); 
}); 
+1

Me encontré con esta publicación hoy, estoy usando html y tengo que eliminar este lapso que se genera. Como mencionaste en tu respuesta, entendí usar jQuery. Mi pregunta es dónde escribir este código y cómo integrarlo en mis informes. Por favor guíame –