Mostrar un pdf partiendo de una jsp (struts)

Tengo una aplicación donde en una jsp listo un serie de datos.
Mi problema está, que cuando las tablas son muy largas, al imprimir el propio navegador
mete su saltos de página y se me montan las tablas, de manera que si la primeras es muy grande la segunda se monta encima de manera parcial(solo los bordes sin imprimir los datos de dentro)
¿Cómo puedo solucionar esto?
He realizado yo después de la tabla forzados de salto de página, pero esto solo me soluciona cuando la primera página ocupa menos de dos hojas, si ocupa más no se soluciona el problema.
La otra es generar un pdf, pero no se como, me he documentado, y no se ni por donde empezar se que hay que partir de un xml y con xls(que lo tengo) pasar con FOP a pdf
Pero no soy capaz de encontrar un ejemplo de proyecto, para descárgalo.
Si me puede evitar lo del pdf mejor!

1 respuesta

Respuesta
1
Podría ponerme a pensar en muchas soluciones para ese tema de los saltos de página al imprimir. Pero sinceramente te voy a recomendar que dejes de usar tablas convencionales, :P.
Uno de los últimos descubrimientos que hice, y que estoy encantado trabajando con ello, es el uso de librerías especializadas en creación de tablas. Se encargan de crear las tablas con un diseño atractivo, ordenación de las columnas, exportación a pdf y excel, etc..
A lo mejor no es tan sencillo cogerle la práctica al estar acostumbrado a las tablas clásicas pero realmente merece la pena. Yo ya no hago tablas que no sean con estas librerías.
En concreto te recomiendo JMesa:
http://code.google.com/p/jmesa/
Échale un ojo y si ves que no te atreves a dar el salto dímelo y miramos ese tema de imprimir jsp's y que no se solapen las tablas.
La cosa es que la aplicación está terminada, y en producción y de este tipo de tablas hojas de impresión tengo 6 luegares, ¿no sería mucho tocar? De todas maneras tampoco termindo de entenderlo donde utilizarlo, estoy trabajando con struts, y veo que es un javascript, p y quisiera tocar lo menos posible.
Ademas mis tablas son
Ejemplo
Etiqueta campo 1 | Etiqueta campo 2|......
Etiquta campo 8 | etiqueta campo 9|......
campo1                 | campo2               | campo3              |....
campo8                 | campo9              |cmapo9             .....
No se si me explico.
Si la aplicación ya está terminada y no quieres meterte en cambios importantes puedes dejar el JMesa para otra ocasión (funciona perfectamente en Struts, que es lo que yo uso, y se puede usar como tags JSP o en los action).
¿Puedes poner algo del código del jsp que genera la tabla? Así puedo ver mejor por qué da problemas y buscar alguna solución.
Esta seria la primera lista que me lista las cajas ubicadas, y luego es otra igual que me lista otra lista de las cajas no ubicadas.
<!-- *********************** UBICACION LOCALIZADA ********************************* -->
<%int ruedaAnt = -1;%>
<logic:notEmpty name="solRecibidasListadoForm" property="ubLocal">
<div class=mifila>
<div class=micol2 style="width:100%">
<h2><img src="<%=Constantes.PATH_IMAGENES%>/flecha-negra.gif" />  <bean:message key="etiqueta.docCajUbicacionLocalizada.titulo"/></h2>
</div>
</div>
<BR /><BR />
<div class=mifila style="width:625px">
<div class="micol2" style="width:625px">
<table border="0" style="width:625px" cellpadding="1" cellspacing="0" >
<tr>
<th align="left" class="celdasTablaCabecera" id="tablaDocSuperAncho" scope="col"><strong><bean:message key="etiqueta.rueda"/> - <bean:message key="etiqueta.caja"/>, <bean:message key="etiqueta.bis"/></strong></th>
<th scope="col" class="celdasTablaCabecera" id="tablaDocPeque"><strong><bean:message key="etiqueta.cajaDoc"/></strong></th>
<th scope="col" class="celdasTablaCabecera" id="tablaDocMedio"><strong><bean:message key="etiqueta.modelo"/></strong></th>
<th scope="col" class="celdasTablaCabecera" id="tablaDocPeque"><strong><bean:message key="etiqueta.col.ejer"/></strong></th>
<th scope="col" class="celdasTablaCabecera" id="tablaDocGrande"><strong><bean:message key="etiqueta.referencia"/></strong></th>
<th scope="col" class="celdasTablaCabeceraDerecha" id="tablaDocGrande"><strong><bean:message key="etiqueta.solicitud"/></strong></th>
</tr>
<tr>
<th scope="col" class="celdasTablaCabecera2" colspan="2"><strong><bean:message key="etiqueta.seccion"/></strong></th>
<th scope="col" class="celdasTablaCabecera2" colspan="3"><strong><bean:message key="etiqueta.nombre"/></strong></th>
<th scope="col" class="celdasTablaCabeceraDerecha2" id="tablaDocGrande"><strong><bean:message key="etiqueta.dni"/>/<bean:message key="etiqueta.cif"/></strong></th>
</tr>
<logic:iterate id="docCaja" name="solRecibidasListadoForm" property="ubLocal" type="net.izfe.g235.hgagestionarchivo.bean.DocCaja">
<%if (ruedaAnt==-1) {
ruedaAnt = docCaja.getRueda();
}%>
<%if (docCaja.getRueda()!=ruedaAnt) { %>
<tr>
<td scope="col" class="celdasTablaDashed" colspan="7"> </td>
</tr>
<%ruedaAnt = docCaja.getRueda();%>
<%}%>
<tr>
<td scope="col" class="celdasTablaSubBottom" colspan="7"> </td>
</tr>
<tr>
<td scope="col" class="celdasTablaSub"><bean:write name="docCaja" property="rueda"/> - <bean:write name="docCaja" property="caja"/>, <bean:write name="docCaja" property="bis"/></td>
<td scope="col" class="celdasTablaSub"><bean:write name="docCaja" property="tipo"/></td>
<td scope="col" class="celdasTablaSub"><bean:write name="docCaja" property="modelo"/></td>
<td scope="col" class="celdasTablaSub"><bean:write name="docCaja" property="ejercicio"/></td>
<td scope="col" class="celdasTablaSub"><strong><bean:write name="docCaja" property="referencia"/></strong></td>
<td scope="col" class="celdasTablaSubFinDerecha"><bean:write name="docCaja" property="codFormateado"/></td>
</tr>
<tr>
<td scope="col" class="celdasTablaSub" colspan="2">
<logic:notEmpty name="docCaja" property="servicio">
<bean:write name="docCaja" property="servicio.descripcion" filter="false"/>
</logic:notEmpty>
<logic:empty name="docCaja" property="servicio">
</logic:empty>
</td>
<td scope="col" class="celdasTablaSub" colspan=3>
<logic:notEmpty name="docCaja" property="nombre">
<bean:write name="docCaja" property="nombre"/>
</logic:notEmpty>
<logic:empty name="docCaja" property="nombre">
</logic:empty>
</td>
<td scope="col" class="celdasTablaSubFinDerecha">
<logic:notEmpty name="docCaja" property="dni">
<bean:write name="docCaja" property="dni"/>
</logic:notEmpty>
<logic:empty name="docCaja" property="dni">
</logic:empty>
</td>
</tr>
</logic:iterate>
<tr>
<td scope="col" class="celdasTablaDashed" colspan="7"> </td>
</tr>
<tr>
<td headers="tablaDocNombre" id="tablaDocTotal" colspan="7"><strong><bean:message key="etiqueta.totalDocumentosCajas" />: <bean:write name="solRecibidasListadoForm" property="tamLocal"/></strong></td>
</tr>
</table>
</div>
</div>
<p class=page > </p>
<p class=page > </p>
</logic:notEmpty>
He encontrado por ahí que puede dar problemas para imprimir tablas los atributos height y width de la tabla. Intenta ponerlos a 100% en la tabla (le estás poniendo anchura fija cuando el div que contiene la tabla ya la tiene, por lo que puedes ponerle 100% )
Aver si produce otros resultados

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas