2010-01-21 30 views
6

Estoy creando un PDF dinámico en ColdFusion y tengo un problema con "pagebreak". La página en cuestión podría tener 1 registro, o hasta más de 60 registros. Cada registro se muestra en 2 filas de una tabla. Algunos de los registros devueltos se dividen entre páginas (la primera fila se encuentra al final de la página uno, la segunda fila es la fila superior de la siguiente).COLDFUSION: cfdocument y forzando un salto de página

Un registro de muestreo de HTML que se muestra:

<tr> 
    <td>Title</td><td>Price</td> 
    <td colspan="2">Description</td> 
</tr> 

por petición del cliente, que estoy tratando de mostrar = < 9 registros por página.

Aquí es una muestra callados de algo que he intentado:

<cfdocument format="PDF"> 
<cfoutput query = "sqllookup"> 
<cfset loopcount = loopcount + 1> 
<cfif loopcount EQ '9'> 
<cfdocumentitem type="pagebreak" /> 
<cfelse> 
<tr> 
    <td>#Title#</td><td>#Price#</td> 
    <td colspan="2">#Description#</td> 
</tr> 
</cfif> 
</cfoutput> 
</cfdocument> 

esto no funciona, (sólo oculta el noveno registro). He intentado varias ideas diferentes, y actualmente estoy perplejo. ¿Acaso estoy buscando algo?

Gracias de antemano.

ColdFusion MX 7. (también me encontré con el parche para la emisión de corte texto. http://kb2.adobe.com/cps/402/kb402093.html)

+0

No es realmente una respuesta, pero una conjetura. ¿Has intentado cerrar la etiqueta de la tabla después de 9 registros y crear la nueva tabla para la página nueva? El único problema es que para el texto largo necesitarás menos filas, esto puede requerir algo de Len() - engaño. – Sergii

Respuesta

6

Usted está ocultando el noveno registro, ya que usted está eligiendo entre la visualización y mostrarlo:

if 9th record 
    break page 
else 
    show record 
end if 

Lo que queremos es más como:

<cfoutput query = "sqllookup"> 
    <!--- this is the 9th row, because 9 mod 9 is 0 ---> 
    <cfif not sqllookup.currentrow mod 9> 
     <cfdocumentitem type="pagebreak" /> 
    </cfif> 
    <tr> 
     <td>#Title#</td><td>#Price#</td> 
     <td colspan="2">#Description#</td> 
    </tr> 
</cfoutput> 
0

trate de añadir un style="page-break-inside: avoid;" a cualquier elemento que no desea que dividirse entre 2 páginas .

Por ejemplo,

<tr style="page-break-inside: avoid;"> 
    <td>#Title#</td><td>#Price#</td> 
    <td colspan="2">#Description#</td> 
</tr> 
+0

La propiedad de CSS 'page-break-inside' solo funciona para Opera http://www.w3schools.com/cssref/pr_print_pagebi.asp –

+1

@JonathanWilson La pregunta no es sobre renderizar a un navegador, sino a un PDF usando CF. He sido testigo (hace más de 2 años) de que este trabajo funciona correctamente al usar CF. – Eddie

+0

Oh. De alguna manera lo entendí mal. –

1

Después de lidiar con este problema de forma intermitente durante varios meses, he descubierto que de un td con un div (es decir. <tr><td><div>Cell Contents</div></td></tr>) evitará un salto de página dentro de la fila. Con esta configuración, un salto de página que normalmente dividiría la fila entre las páginas caerá antes de la fila, creando un poco de espacio en blanco al final de la primera página y colocando la fila al principio de la página siguiente.

Nota sobre las filas con varias celdas: Un div solo td-anidado es suficiente para causar el comportamiento anterior para toda la fila.

<tr> 
    <td>Blah blah blah blah blah</td> 
    <td>Gnar gnar gnar gnar gnar</td> 
    <td><div>Soda POP soda POP soda POP</div></td> <!--- the fix ---> 
    <td>Stellar!</td> 
</tr> 
+0

En mis pruebas con CF10 (aunque creo que el motor CFdocument no ha cambiado desde CF8), el renderizador parece mantener las filas juntas si son de tres o cuatro líneas de alto, y los divide en algún momento. Esta solución DIV funcionaba para filas ligeramente más altas, tal vez el algoritmo pondera los elementos de nivel de bloque e intenta mantenerlos juntos, por lo que las tablas de anidación dentro de las tablas pueden desalentar los saltos de página (¡ay!) –

0

Para mí, después de haber intentado todos los trucos y consejos foro etc. - lo único que trabajó en CF8 para bloques de código más grandes (incluyendo imágenes, tablas, etc. bloque div) es:

  • envuelven la parte no salto de página con

    <div>...</div>

  • sino un súper simple <br> después de que en una nueva línea (en código) p.

    <div> ... your stuff ... </div> <br>

que funcionaba, demonios sabe por qué ...

Cuestiones relacionadas