2009-12-30 15 views
6

He creado un informe basado en HTML que puede tener longitudes variables y número de segmentos en C# (razón por la cual no se utilizó Crystal Reports) y no puedo usar el maravilloso http://www.printfriendly.com/ ya que el informe está basado en Intranet (boooo, siseo).Informe basado en HTML dividido en fragmentos por paginación

He creado un archivo CSS media = print que se utiliza para hacer el formato de papel y tinta lo más eficiente posible, pero tengo un problema. Hay una tabla muy larga en el informe con alrededor de 50 filas de tablas, cada una alrededor de la altura: 200px. Desafortunadamente, algunas de las filas de la tabla se están cortando debido a la rotura automática de la página, con parte de la fila de la tabla en una página y el resto en la página siguiente. ¿Hay alguna forma (esperemos que a través de CSS) de configurar las opciones de apertura de página para que no separe los elementos de la tabla (o elementos similares)?

Gracias, Alex

+0

Me gustaría que CSS manejara mejor las tablas de impresión, pero no parece comportarse bien con las opciones de salto de página de CSS. También me gustaría ver una solución a esta. –

+0

Disculpas por la respuesta tardía a las respuestas, han sido en unas cortas vacaciones. Después de una cuidadosa consideración, he decidido darle la respuesta a Brian, ya que encontró algunos resultados interesantes a través de sus pruebas, y sugirió una solución con Prince. También marqué la respuesta de markjgrant ya que era una solución posible a través de un truco que no había pensado. – Alex

Respuesta

1

El page-break-inside: avoid propiedad debe controlar esto, pero parece que la mayoría de los navegadores no soportan que el tr o td elementos. En mis pruebas, Opera es el único que hace honor a esta propiedad, tal como se utiliza en la siguiente prueba:

<!DOCTYPE html> 
<title>Page Break Test</title> 
<style>tr, td { page-break-inside: avoid }</style> 
<table border=1> 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
</table> 

Si puede utilizar Opera, esto podría ser lo suficientemente bueno. Otra opción sería consultar el Prince para imprimir sus informes, ya que tiende a tener un soporte mucho mejor para las características de hojas de estilo de impresión que los navegadores (aunque no he probado esta característica en particular).

1

Si la altura de su fila resulta ser fija, puede averiguar cuántas filas caben en una página, luego use page-break-after: always en cada n-ésima fila para forzar saltos de página en los lugares apropiados. Es un truco, pero podría ser tu mejor opción.

+1

Pero nunca sabrá con certeza cuántos encajarán, porque los diferentes navegadores imprimen de manera diferente, los usuarios pueden aumentar/disminuir el tamaño de la fuente, y los usuarios pueden cambiar los márgenes de impresión y el tamaño de la página. –

+0

media = print CSS puede minimizar estos factores, aunque no eliminarlos por completo. – keithjgrant

1

Desafortunadamente, es imposible lograr de manera confiable lo que desea con HTML.

Si desea un alto nivel de control sobre lo que se imprime, sugiero que su generador de informes imprima PDF o XPS en lugar de HTML (o como aconsejó Brian Campbell, utilizando una herramienta como Prince que puede tomar HTML y convertirlo a PDF).

Cuestiones relacionadas