COLDFUSION: cfdocument and forcing a pagebreak

戏子无情 提交于 2019-12-18 05:54:45

问题


I am creating a dynamic PDF in ColdFusion and having an issue with "pagebreak". The page in question could have 1 record, or up to 60+ records. Each record is displayed in 2 rows of a table. Some of the returned records are being split between pages (first row is at the end of page one, the second row is the top row of the next).

A sample record in displayed HTML:

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

Per client request, I am trying to display =< 9 records per page.

Here is a dumbed down sample of something I have tried:

<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>

This does not work, (it only hides the 9th record). I have tried several different ideas, and I am currently stumped. Am I over looking something?

Thanks in advance.

ColdFusion MX 7. (I also ran the hot fix for text cut-off issue. http://kb2.adobe.com/cps/402/kb402093.html)


回答1:


You are hiding the 9th record because you are choosing between displaying it and showing it:

if 9th record
    break page
else
    show record
end if

What you want is more like:

<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>



回答2:


After wrestling with this issue on and off for several months, I've discovered that wrapping the contents of a td with a div (ie.<tr><td><div>Cell Contents</div></td></tr>) will prevent a page-break inside the row. With this setup, a page-break that would normally split the row between pages will instead fall before the row, creating a little extra whitespace at the end of the first page and placing the row at the beginning of the next page.

Note about rows with multiple cells: A single td-nested div is sufficient to cause the above behavior for the whole row.

<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>



回答3:


Try adding a style="page-break-inside: avoid;" to any element that you don't want to be split between 2 pages.

For instance,

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



回答4:


For me, after trying all the tricks and forum hints etc. - the only thing that worked in cf8 for larger blocks of code (including images, tables, div block etc.) is:

  • wrap the non page breaking part with

    <div>...</div>

  • but a super simple <br> after it in a new line (in code) e.g.

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

that worked, hell knows why...



来源:https://stackoverflow.com/questions/2112866/coldfusion-cfdocument-and-forcing-a-pagebreak

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!